__class和__classStatic的联合用法

阅读次数: 589

  • A+
所属分类:建站

p.php

<?php
namespace app\open\controller;

class P{

    protected function notify($ddd)
    {
        print_r(get_class($this).'notify11111');
        echo PHP_EOL;
    }

    public static function refund()
    {
        echo self::class.'refund';
    }

    public function __call($method,$parameters)
    {
        return $this->$method($parameters);
    }

    public static function __callStatic($method,$parameters)
    {
        return (new static)->$method($parameters);
    }

}

pp.php

<?php
namespace app\open\controller;

use app\model\video\VideoMemberModel;
use app\model\video\base\VideoMember;

class Pp extends P{

    protected function notify($ddd)
    {


        VideoMemberModel::member_add();


        print_r(get_class($this).'notify222');
        echo PHP_EOL;
    }

}

test.php


    public function test_p(Request $request){
       Pp::notify(111);

    }

这里有几个细节

如果父级的方法中是private时,则用静态方法调用 pp::notify时,只会调用到父级的方法

如果父级的方法中是protected时,则用静态方法调用 pp::notify时,如果子级类也有声明protected 则会调用到 子级类的对应方法

如果父级的方法中是public时,则不能用静态方法调用,因为这两个魔术方法只针对寻找不到的父级方法才会生效。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: