第二十一节:类与对象-对象的比较-类型约束

PHP5中的对象比较要比PHP4中复杂,也比其它一般的面向对象语言复杂。

当使用对比操作符(==)比较两个对象变量时,比较的原则:如果两个对象的属性和属性值都相等。而且两个对象是一个同一个类的实例,那么这两个对象变量相等。而如果使用全等操作符(===),这两个对象变量一定要指向某一个类的同一个实例(即同一个对象)。$o=new O(); $p=$o  $p=&$o  都是全等。

 1 <?php 
 2 function bool2str($bool)
 3 {
 4     if($bool === false){
 5         return 'FALSE';
 6         }else{
 7             return 'TRUE';
 8             }
 9     }
10 function compareobjects(&$o1,&$o2)
11 {
12     echo 'o1==o2:'.bool2str($o1==$o2)."<br/>";
13     echo 'o1!=o2:'.bool2str($o1!=$o2)."<br/>";
14     echo 'o1===o2'.bool2str($o1===$o2)."<br/>";
15     echo 'o1!==o2'.bool2str($o1!==$o2)."<br/>";
16     }    
17 class Flag
18 {
19     public $Flag;
20     function Flag($flag = true) {
21         $this->flag = $flag;
22     }
23 }    
24 class OtherFlag
25 {
26     public $flag;
27     function otherFlag($flag=true){
28         $this->flag=$flag;
29         }
30     }
31 $o= new Flag();
32 $p= new Flag();
33 $q= $o;
34 $x=&$o;
35 $r= new OtherFlag();
36 echo "Two instances of the same class <br/>";
37 compareObjects($o,$p);    
38 /*
39 Two instances of the same class 
40 o1==o2:TRUE
41 o1!=o2:FALSE
42 o1===o2FALSE
43 o1!==o2TRUE
44 */
45 echo " Two references to the same instance <br/>";
46 compareobjects($o,$q);
47 /*
48 Two references to the same instance 
49 o1==o2:TRUE
50 o1!=o2:FALSE
51 o1===o2TRUE
52 o1!==o2FALSE
53 */
54 echo "\nInstances of two different classes\n";
55 compareObjects($o, $r);
56 /*Instances of two different classes 
57 o1==o2:FALSE
58 o1!=o2:TRUE
59 o1===o2FALSE
60 o1!==o2TRUE
61 */
62 compareObjects($o, $x);
63 /*
64 o1==o2:TRUE
65 o1!=o2:FALSE
66 o1===o2TRUE
67 o1!==o2FALSE
68 */
69 ?>

 

PHP 5 可以使用类型约束。函数的参数可以指定只能为对象(在函数原型里面指定类的名字),php 5.1 之后也可以指定只能为数组。 注意,即使使用了类型约束,如果使用NULL作为参数的默认值,那么在调用函数的时候依然可以使用NULL作为实参。 

他这个规范其实有点奇怪,类型约束能详细约束,使用哪个类的实例为args,但是对于数组,只能约束到,他是一个数组。

 1 <?php 
 2 class MyClass{
 3  public $var='MyClass :: var';
 4  function bor(array $row=NULL){
 5      echo 'I am bor()'.$row;
 6      }    
 7     }
 8 class otherClass{
 9     // $args 只能是一个MyClass的对象
10     function foo(MyClass $args=NULL){
11         var_dump($args->bor(array('a','b','c','d','f')));
12         }
13     }    
14 $myclass=new MyClass();
15 $otherClass=new otherClass();
16 $otherClass->foo($myclass);
17 //如果默认参数是NULL 可以穿个NULL
18 //$otherClass->foo(NULL);    
19 ?>

 

posted @ 2013-02-09 10:03  saws  阅读(280)  评论(0编辑  收藏  举报