• 微信:
  • hai764003
  • QQ:
  • 511211014
  • E-mail:
  • jaquery@163.com

案例总数51

访问总数312365

收藏总数310896

什么是面向对象?面向对象的简单了解!返回列表

上传时间: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个对象,就相当于在内存中分别有了8name,age ,weight,head=1.但是如果这个类恰好比如的是人,而人都有一个共同特点,就是都有一个头,head=1,如果我们把这个共同的属性拿出来的话,就不用定义8次浪费空间了。这个时候,我们就可以不把它定义为普通的属性,而定义为静态属性。这个时候这个静态属性就存在于类当中了,如论是否实例化它都存在于类中,并且通过类名::静态属性调用,比如:Human::head.


从内存角度看:

static属性存放在类的区域中,普通属性存放在对象中,由此推到出2点:

1. 类声明完毕该属性就存在,对于它的访问不依赖于对象。

2. 因为类在内存中只有一个,因此静态属性只有1个。

3. 当时当静态属性被某个对象调用过程中改变了值的话,那么它就真的在类中改变了值。


和普通方法属性的区别:

普通方法需要对象去调用,也就需要绑定$this,即普通方法必须要有对象去调用。

静态方法不属于哪个对象,不需要绑定$this,只需要类名就可以调用。


如上分析:

1. 其实非静态方法是不能由类名静态调用的,但是由于php中的面向对象检测不严格, 只要该方法没有$this,就会转化为静态方法来调用,但是PHP5.3strict模式下,或PHP5.4默认模式下,都已经对类名::非静态方法的调用做错误提示:

Error_reporting(E_ALL|E_STRICT);


2. --》 访问 --静态方法 :可以

--》 访问 --普通方法 :不可以


对象 --》 访问 --静态方法: 可以

对象 --》 访问 --普通方法: 可以


 

小海哥推荐你看: 博客园  php教程分享网站  phpmywind  脚本之家