php基础知识:类与对象(1)
作者:bea
类的定义: 以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。伪变量$this可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。//??静态调用的内部到底是怎样的?看个例子:class A{ function foo() { if (isset($this)) { echo '$this
类的定义: 以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。伪变量$this可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。//??静态调用的内部到底是怎样的?看个例子:class A{ function foo() { if (isset($this)) { echo '$this is defined ('; echo get_class($this); echo ")
"; } else { echo "$this is not defined.
"; } }}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);输出:NULLNULLobject(SimpleClass)#1 (1) { ["var"]=> string(30) "$assigned will have this value"}图示整个过程:类继承extends一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。(继承的机制到底怎样的?) 源代码如下:class ExtendClass extends SimpleClass{ // Redefine the parent method function displayVar() { echo "Extending class
"; parent::displayVar(); }}$extended = new ExtendClass();$extended->displayVar();输出:Extending classa default value
有用 | 无用
"; } else { echo "$this is not defined.
"; } }}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);输出:NULLNULLobject(SimpleClass)#1 (1) { ["var"]=> string(30) "$assigned will have this value"}图示整个过程:类继承extends一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。(继承的机制到底怎样的?) 源代码如下:class ExtendClass extends SimpleClass{ // Redefine the parent method function displayVar() { echo "Extending class
"; parent::displayVar(); }}$extended = new ExtendClass();$extended->displayVar();输出:Extending classa default value
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- PHP 模板高级篇总结
- PHP函数utf8转gb2312编码
- 小偷PHP+Html+缓存
- PR值查询 | PageRank 查询
- 转PHP手册及PHP编程标准
- IIS环境下快速安装、配置和调试PHP5.2.0
- 亲密接触PHP之PHP语法学习笔记1
- PHP读MYSQL中文乱码的解决方法
- 落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
- php 进阶:实现无限分类
- 缓存技术详谈—php
- PHP面向对象编程快速入门
- 如何对PHP程序中的常见漏洞进行攻击(上)
- Breeze 文章管理系统 v1.0.0正式发布
- 谈谈新手如何学习PHP
- php基础知识:类与对象(5) static
- php基础知识:类与对象(4) 范围解析操作符(::)
- php基础知识:类与对象(3) 构造函数和析构函数
- php基础知识:类与对象(2) 自动加载对象