传智播客详解PHP类和对象的其他相关技术

2017 年 12 月 26 日2500

  为了便于广大程序员和初学者学习PHP,传智播客的老师将PHP类和对象的其他相关技术进行了总结和分析,如下:

  传智播客的老师指出,当在一个代码中,需要使用一个类(比如new),但此时,在这行代码之前,都没有出现过该类的定义,则PHP有一种机制,可以让系统这个时候去调用一个函数,在该函数中,我们就可以预先写好加载类的代码——这样就实现了类的自动加载。

  该函数就是:__autoload()

  该函数使用形式如下:

  function __autoload( $class_name ){

  //这里就可以去写加载类的代码,其中:

  //$class_name就代表“正需要”的那个类名;

  }

  

  可见,实现这种类的自动加载的方便性,需要做到:

  1,类文件名有一个统一的形式:比如:类名.clsss.php

  2,统一都放在一个文件夹中;

  3,尽可能做到:一个类文件中,只放一个类的定义;

  自定义类的加载函数

  使用下述函数,可以人为定义“多个”自动加载函数(这些函数的作用跟__autoload)一样。

  使用形式:

  spl_autoload_register(“自动加载函数名1”);

  spl_autoload_register(“自动加载函数名2”);

  。。。。

  然后就可以去定义这些函数了

  在运行的时候,如果需要一个类,就先调用第1个函数去“试图”加载该类,如果在该函数中没有加载成功,就会继续调用下一个函数继续“试图”加载该类,依此类推。。。

  举例:

  

进入auto1,需要:$class_name";$file = "./{$class_name}.class.php";if(file_exists($file)){include_one $file;}}function auto2($class_name){echo "

进入auto2,需要:$class_name";$file = "./{$class_name}.class.php";if(file_exists($file)){include_one $file;}} $obj1 = new A();echo "

";var_dump($obj1); $obj2 = new B();echo "

";var_dump($obj2);

  展示结果为:

  进入auto1,需要:A

  object(A)#1 (0) {}

  进入auto1,需要:B

  进入auto2,需要:B

  object(B)#2 (0) {}

  对象的复制

  $obj1 = new A();

  $obj2 = $obj1; //这里,虽然是值传递,但因为对象数据存储的特殊性,并没有复制对象数据本身

  //即,并没有生成一个新对象;

  要想复制一个对象——得到一个完完全全的相同的对象,只能这样:

  $obj3 = clone $obj1;

  p1 = 11;var_dump($obj1);var_dump($obj2);var_dump($obj3);

  展示效果:

  object(A)#1 (1) {["p1"]=>int(1)}

  object(A)#1 (1) {["p1"]=>int(1)}

  object(A)#2 (1) {["p1"]=>int(1)}

  object(A)#1 (1) {["p1"]=>int(11)}

  object(A)#1 (1) {["p1"]=>int(11)}

  object(A)#2 (1) {["p1"]=>int(1)}

  可见,普通赋值所得到的对象,仍然是原来的对象;

  只有clone所得到的对象,才是一个全新的对象;

  注意:

  1,当对一个对象进行克隆的时候,就会自动调用系统中的__clone()魔术方法(如果有);

  2,因此,对于单例类的需求来说,就应该做到:禁止克隆,写法:

  private function __clone(){ }

  对象的遍历

  跟数组类似,对象的“所有属性”,也是可以进行遍历的——一个一个取出。

  形式:

  foreach( $对象 as $prop => $value ){

  //$prop表示属性名;

  //$value表示对应的属性值;

  }注意:

  

  其实能取到的属性数据,只是在该位置可以访问(有权限访问)到的那些。

  $value){ echo "属性$prop = $value"; } }} $a1 = new A();foreach($a1 as $prop=>$value){ echo "属性$prop = $value";} $a1->showInfo();

  展示效果:

  属性p1 = 1;

  属性p1 = 1

  属性p2 =2

  属性p3 = 3

  如果你对以上内容感兴趣,想进一步加深了解和学习,也可以登录传智播客官网进行相关搜索或咨询.

0 0