什么是面向对象?面向对象的简单了解!返回列表
上传时间:2015-02-02 内容关键字:什么是面向对象?面向对象的简单了解!
5. $this:
class Human{
public $name='lis';
public function who(){
echo $this->name;
}
public function test(){
echo $name;
}
}
$a = new Human();
$a->who();
$a->test();
原理:当一个对象($a)调用其方法(who())时,该方法执行之前,先完成一个绑定。就是$this绑 定到调用该方法的那个对象上。
注意:$a->test();这个时候,会报错说未定义的方法。因为在方法体内想访问调用者的属性,必须 用$this,如果不加$this则理解为调用方法内部的一个局部变量。
6. new :
1. new 对象时:
1. 申请内存,生成对象(属性和方法的集合)
2. 如果有构造函数,则执行
3. 返回该对象的地址
2. 构造函数:
1. 对象销毁时执行。
2. 什么叫销毁对象?
答:$a = new Human();
$a 并不是对象,它只是一个变量名,指到对象。
unset($a) 未必销毁了对象。如果还有其他变量同时指到对象的时候
比如:$b=$c=$a=new Human();。只有所有指向对象的变量全部销毁才销毁。
7. static 静态属性和方法:
概念:在属性和方法之前加static修饰,这种称为静态属性/静态方法。
原理引导:
我们声明类的时候,内存中有一个类的内存空间,存放着所有属性和方法。当我们实例化对象的时候,每实例化一次,都会在内存中重新开辟一个内存空间。比如一个类如下:
class Human{
public name;
public age weight;
public weight;
static public head=1;
}
如果实例化8个对象,就相当于在内存中分别有了8个name,age ,weight,head=1.但是如果这个类恰好比如的是人,而人都有一个共同特点,就是都有一个头,head=1,如果我们把这个共同的属性拿出来的话,就不用定义8次浪费空间了。这个时候,我们就可以不把它定义为普通的属性,而定义为静态属性。这个时候这个静态属性就存在于类当中了,如论是否实例化它都存在于类中,并且通过类名::静态属性调用,比如:Human::head.
从内存角度看:
static属性存放在类的区域中,普通属性存放在对象中,由此推到出2点:
1. 类声明完毕该属性就存在,对于它的访问不依赖于对象。
2. 因为类在内存中只有一个,因此静态属性只有1个。
3. 当时当静态属性被某个对象调用过程中改变了值的话,那么它就真的在类中改变了值。
和普通方法属性的区别:
普通方法需要对象去调用,也就需要绑定$this,即普通方法必须要有对象去调用。
静态方法不属于哪个对象,不需要绑定$this,只需要类名就可以调用。
如上分析:
1. 其实非静态方法是不能由类名静态调用的,但是由于php中的面向对象检测不严格, 只要该方法没有$this,就会转化为静态方法来调用,但是PHP5.3的strict模式下,或 者PHP5.4默认模式下,都已经对类名::非静态方法的调用做错误提示:
Error_reporting(E_ALL|E_STRICT);
2. 类 --》 访问 --静态方法 :可以
类 --》 访问 --普通方法 :不可以
对象 --》 访问 --静态方法: 可以
对象 --》 访问 --普通方法: 可以
- 上一篇:php-fpm 基础介绍
- 下一篇:COOKIE、SESSION之彻底搞定!