zoukankan      html  css  js  c++  java
  • 10分钟学会php面相对象基础(Ⅲ)

    final 可以适用final 定义类或者方法,这样定义的是最终方法或类,这样的方法或类不能被覆盖;
    final class Person
    {
        function say()
        {
     
        }
    }

    STATIC 类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。

    前面说到过内存的四个区域 堆、栈、初始化静态段、?

    静态变量被放置于初始化静态段,其他子类并不能访问他,只有实例可以访问,而且用的是同一个,节省了很多内存,不用每次都去实例化这一部分。

     静态成员被这个类的每个实例对象所共享;

    使用对象访问不到静态成员的;

    类里面的静态方法只能访问类的静态的属性;

    静态的方法是不用对象调用的,而是使用类名来访问;

    在静态方法中访其它静态成员我们使用的是一个特殊的类“self”;
     
    class Person
    
    {
    
       static $country = "china";
    
       public function say(){
    
       echo self::country;
    
       }
    
    }
    
    Person::say();
    
    $xiaomin = new Person();
    
    $xiaomin->say();

    const是一个定义常量的关键字,与static类似,不能用 $THIS 访问,也不能用对象来访问;另外命名时不用加『$』,如下

    class Person
    
    {
    
       const country = "china";
    
       public static function say(){
    
       echo self::$country;
    
       }
    
    }
    
    echo Person::contry;
    
    $P1= new Person;
    
    $P1->say();

    __toString()方法

    如果你在类里面定义了“__toString()”方法,在直接输出对象引用的时候,就不会产生错误,而是自动调用 了”__toString()”方法, 输出“__toString()”方法中返回的字符,所以“__toString()”方法一定要有个返回值(return 语句)

    class Person
    
    {
    
       static $country = "china";
    
       public $name;
    
       function __construct($name){
    
       $this->name = $name;
    
       }
    
       public static function say(){
    
       echo self::$country;
    
       }
    
       function __toString(){
    
       return $this->name;
    
       }
    
    }
    
    $p1= new Person('xiaoming');
    
    echo $p1;

    输出了:xiaoming;

    clone 方法和 __clone();克隆,当需要一个或多个相同的对象时,可以使用克隆,

    __CLONE()中还提供了两个指针,this 和 that,this指复制体,that指爸爸 = =;

    以上面那个例子写下来;

    $P2=CLONE $P1;

    __clone可以在clone时起效,如下例子;

    class Person
    
     
    
    {
    
     
    
       static $country = "china";
    
     
    
       public $name;
    
     
    
       function __construct($name){
    
     
    
       $this->name = $name;
    
     
    
       }
    
     
    
       public static function say(){
    
     
    
       echo self::$country;
    
     
    
       }
    
     
    
    public function __toString(){
    
    return $this->name;
    
    }
    
    public function __clone(){
    
    $this->name = "复制体".$this->name;
    
    }
    
    }
    
     
    
    $P1 = NEW PERSON("CC");
    
     
    
    $P2 = CLONE $P1;
    
     
    
    ECHO $P1; //CC
    
    ECHO $P2; //复制体CC
    
    ?>
     此处有疑问,我在网上很多地方看到了这个that,但是实际查官方文档没找到,试了以下用this也没问题;
     

    __call() 方法 调用对象内部的一个方法而这个方法不存在时,会报错,然后停止运行,这时候可以用__CALL 来解决;

    继续上面那段,最后加入

    $P2->havefun("1");

    echo "test";

    这时候报错 Fatal error: Call to undefined method Person::havefun(); test也不会输出;

    __call($n,$ary) call包含两个参数,第一个为不存在的方法的名称,第二个怎么以数组的方式接收这个方法传过来的一个或多个参数

    在上面的代码中加入  

    function __call($n,$ary){
            print "functionname=".$n;
            print "参数为:";
            print_r($ary);
        }

    则能够输出:unctionname=havefun参数为:Array ( [0] => 1 ) test;

  • 相关阅读:
    【linux】驱动-13-阻塞与非阻塞
    【linux】驱动-12-并发与竞态
    【linux】驱动-11-gpio子系统
    【linux】驱动-10-pinctrl子系统
    【linux】驱动-9-设备树插件
    手写Java分页模块
    JDBC连接与自定义线程池
    类加载器
    网络编程之TCP
    网络编程之UDP
  • 原文地址:https://www.cnblogs.com/07byte/p/5825520.html
Copyright © 2011-2022 走看看