php基础知识:类与对象(1)


Posted in PHP onDecember 13, 2006

类的定义:
   以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。

伪变量$this
可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。
//??静态调用的内部到底是怎样的?
看个例子:
class A
{
   function foo()
   {
       if (isset($this)) {
           echo '$this is defined (';
           echo get_class($this);
           echo ")\n";
       } else {
           echo "\$this is not defined.\n";
       }
   }
}
class B
{
   function bar()
   {
       A::foo();
   }
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
输出结果为:
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
/*我希望知道这个例子的内存等的具体实现,我暂时无法理解。如果有人可以讲清楚,可以告诉我。我们宿舍牛头现在正在冬眠,等他醒来,我会问。*/

new
要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。

(这几句话虽然很短,但是未必容易理解。)
例子如下:
class SimpleClass
{
   // 成员声明
   public $var = 'a default value';

   // 方法声明
   public function displayVar() {
       echo $this->var;
   }
}

//看下面的图.1>new 在heap(堆)中实例化一个对象。2>将指针$instance指向他
$instance = new SimpleClass();
//3>将指针$assigned指向heap中的实例化对象
$assigned   =  $instance;
//4>将$instance的引用(地址)赋值给$reference
$reference  =& $instance;
$instance->var = '$assigned will have this value';
$instance = null;
// 5>间断$instance与heap中实例的连接。
var_dump($instance);
var_dump($reference);
var_dump($assigned);
输出:
NULL
NULL
object(SimpleClass)#1 (1) {
  ["var"]=>
    string(30) "$assigned will have this value"
}
图示整个过程:
php基础知识:类与对象(1)

类继承extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。

被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。(继承的机制到底怎样的?)
源代码如下:
class ExtendClass extends SimpleClass
{
   // Redefine the parent method
   function displayVar()
   {
       echo "Extending class\n";
       parent::displayVar();
   }
}
$extended = new ExtendClass();
$extended->displayVar();

输出:
Extending class
a default value

PHP 相关文章推荐
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
php学习笔记之基础知识
Nov 08 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
Jan 22 PHP
php定时执行任务设置详解
Feb 06 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
Oct 23 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 PHP
php基础知识:函数基础知识
Dec 13 #PHP
php基础知识:控制结构
Dec 13 #PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 #PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 #PHP
傻瓜化配置PHP环境――Appserv
Dec 13 #PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 #PHP
中篇:安装及配置PHP
Dec 13 #PHP
You might like
php封装的连接Mysql类及用法分析
2015/12/10 PHP
PHP运行模式汇总
2016/11/06 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
JS实现兼容各浏览器解析XML文档数据的方法
2015/06/01 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
Vue.js用法详解
2017/11/13 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python中分数的相关使用教程
2015/03/30 Python
python 数据的清理行为实例详解
2017/07/12 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
Python中请不要再用re.compile了
2019/06/30 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
会计实习生自我鉴定
2013/12/12 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
阳光体育活动方案
2014/02/16 职场文书
审计专业自荐信范文
2014/04/21 职场文书
辅导员学期工作总结
2015/08/14 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis