• php面向对象常见的关键字和魔术方法


      1.final关键字:最终版本的类或方法,在类的前面加上final表示该类不能被继承,在方法前面加上final表示该方法不能在子类中重写。

    <?php
    /**
    1.类不能被继承
    */
    final class a{ //类中的代码 } class b extends a{ //继承的类的代码 }
    <?php
    /**
    2.方法不能被重写
    */
    class a{ final function run(){ //方法代码 } } class b extends a{ function run(){ //方法重写的代码 } }

      2.static关键字:使用static关键字可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法。而static成员作为整个类的属性存在,则不管通过类创建多少个对象(甚至可以是没有对象),这个static成员总是唯一存在的,在多个对象之间共享的。因为使用 static 标识的成员是属于类的,所以与对象实例和其他的类无关。类的静态属性非常类似于函数的全局变量。类中的静态成员是不需要对象而使用类名来直接访问的,在类中声明的成员方法中,也可以使用关键字“self”来访问其他静态成员,因为静态成员是属于类的,而不属于任何对象,所以不能用$this来引用它,在PHP中给我们提供了self关键字,就是在类的成员方法中用来代表本类的关键字。

    self::staticAttrbuteName;  //静态成员属性名
    self::staticPropertyName();  //静态成员方法名

    如果在类的外部访问类中的静态成员,可以使用对象引用和使用类名访问,但通常选择使用类名来访问。如果在类内部的成员方法中访问其他的静态成员,通常使用self的形式去访问,最好不要直接使用类名称。

      示例:统计一个类创建对象的个数

    <?php
    class myClass{
        static $count;
        function __construct(){
            self::$count ++;
        }
        
        static function getCount(){
            return self::$count;
        }
    }
    
    //初始化静态成员属性
    myClass::$count = 0;
    
    //创建多个对象
    $obj1 = new myClass;
    $obj2 = new myClass;
    $obj3 = new myClass;
    
    //访问方式一:类名访问静态成员属性
    echo myClass::$count;  // 输出:3
    echo "<br>";
    
    //访问方式二:类名访问静态成员方法
    echo myClass::getCount();  // 输出:3
    echo "<br>";
    
    //访问方式三:对象引用访问
    echo $obj2->getCount();  // 输出:3

    3.__call()魔术方法:在对象中调用一个不可访问方法时调用。

      

    //该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $arguments 则以数组的方式接收不存在方法的多个参数。

       __call() 方法的格式:

    function __call(string $function_name, array $arguments)
    {
        // 方法体
    }

    没事的时候总结一下,继续努力中……

  • 相关阅读:
    fastjson报错 java.lang.StackOverflowError
    关于mybatis使用foreach插入速度较慢的问题
    selectKey返回查询的LAST_INSERT_ID的总是1
    使用java制作https证书
    cf 809
    多校 2009 3
    多校 2009 2
    多校 2009 1
    codeforces 808
    hdu 4734 数位DP
  • 原文地址:https://www.cnblogs.com/qingsong/p/12993944.html
Copyright © 2020-2023  润新知