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)
{
    // 方法体
}

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

原文地址:https://www.cnblogs.com/qingsong/p/12993944.html