zoukankan      html  css  js  c++  java
  • 第二十一节:类与对象对象的比较类型约束

    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 ?>
  • 相关阅读:
    理解JavaScript Call()函数原理。
    数据结构水题大赛官方题解#3 XXX的stl
    数据结构水题大赛官方题解#2 XXX的脑白金
    数据结构水题大赛官方题解#1 XXX的面试
    P3390 矩阵快速幂
    2020.6.8 T1 棋子移动
    U68862 奶牛滑迷宫
    5月18日考试错误题目走迷宫
    最小生成树两种算法详解
    p1220关路灯(小优化)
  • 原文地址:https://www.cnblogs.com/saw2012/p/2909517.html
Copyright © 2011-2022 走看看