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

 

4.const关键字:虽然 const 和 static 的功能不同,但使用的方法比较相似。在 PHP 中定义常量是通过调用 define()函数来完成的,但要将类中的成员属性定义为常量,则只能使用 const 关键字。将类中的成员属性使用const关键字标识为常量,其访问的方式和静态成员一样,都是通过类名或在成员方法中使用self关键字访问,也不能用对象来访问。标识为常量的属性是只读的,不能重新赋值。如果在程序中试图改变它的值,则会出现错误。所以在声明常量时一定要赋初值,因为没有其他方式后期为常量赋值。注意,使用const声明的常量名称前不要使用“$”符号,而且常量名称通常都是大写的。

 


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

posted @ 2020-05-30 17:50  孤舟残月浅笑嫣然  阅读(192)  评论(0)    收藏  举报