2020年5月24日
<?phpclass A{protected static function test(){}public static function __callStatic($name,$params){var_dump($name);var_dump($params);//通过接收到的名字做操作,然后返回值if($name=='sum'){//求和$sum=0;foreach($params as $value){$sum+=$value;}return $sum;}}}//调用不存在方法A::hz('a','b');echo"<hr>";//调用没有权限的方法A::test(100,200,300);echo"<hr>";//魔法方法中实现累加功能$res=A::sum(530,110,125);var_dump($res);class A{//通常不写形参,参数并不是确定public function __invoke(){$p =func_get_args();var_dump($p);$sum=0;foreach ($p as $value){$sum+=$value;}return $sum;}}//把对象当成函数调用起始就是去调用类中的__invoke方法$obj=new A();var_dump($obj(50,60,70));abstract class A{public $name="黑子";//定义抽象方法abstract public function demo();abstract public function demo1($name,$age);public function adc(){var_dump("adc");}}class B extends A{//实现抽象方法public function demo(){var_dump("demo方法");}public function demo1($n,$a){var_dump("demo1方法",$n,$a);}}$obj=new B();var_dump($obj);$obj->demo();$obj->demo1('小黑',18);$obj->adc();var_dump($obj->name);<?phpclass A{protected static function test(){}public static function __callStatic($name,$params){var_dump($name);var_dump($params);//通过接收到的名字做操作,然后返回值if($name=='sum'){//求和$sum=0;foreach($params as $value){$sum+=$value;}return $sum;}}}//调用不存在方法A::hz('a','b');echo"<hr>";//调用没有权限的方法A::test(100,200,300);echo"<hr>";//魔法方法中实现累加功能$res=A::sum(530,110,125);var_dump($res);class A{//通常不写形参,参数并不是确定public function __invoke(){$p =func_get_args();var_dump($p);$sum=0;foreach ($p as $value){$sum+=$value;}return $sum;}}//把对象当成函数调用起始就是去调用类中的__invoke方法$obj=new A();var_dump($obj(50,60,70));abstract class A{public $name="黑子";//定义抽象方法abstract public function demo();abstract public function demo1($name,$age);public function adc(){var_dump("adc");}}class B extends A{//实现抽象方法public function demo(){var_dump("demo方法");}public function demo1($n,$a){var_dump("demo1方法",$n,$a);}}$obj=new B();var_dump($obj);$obj->demo();$obj->demo1('小黑',18);$obj->adc();var_dump($obj->name);<?phpclass A{protected static function test(){}public static function __callStatic($name,$params){var_dump($name);var_dump($params);//通过接收到的名字做操作,然后返回值if($name=='sum'){//求和$sum=0;foreach($params as $value){$sum+=$value;}return $sum;}}}//调用不存在方法A::hz('a','b');echo"<hr>";//调用没有权限的方法A::test(100,200,300);echo"<hr>";//魔法方法中实现累加功能$res=A::sum(530,110,125);var_dump($res);class A{//通常不写形参,参数并不是确定public function __invoke(){$p =func_get_args();var_dump($p);$sum=0;foreach ($p as $value){$sum+=$value;}return $sum;}}//把对象当成函数调用起始就是去调用类中的__invoke方法$obj=new A();var_dump($obj(50,60,70));abstract class A{public $name="黑子";//定义抽象方法abstract public function demo();abstract public function demo1($name,$age);public function adc(){var_dump("adc");}}class B extends A{//实现抽象方法public function demo(){var_dump("demo方法");}public function demo1($n,$a){var_dump("demo1方法",$n,$a);}}$obj=new B();var_dump($obj);$obj->demo();$obj->demo1('小黑',18);$obj->adc();var_dump($obj->name);
笔记:
魔术方法 callStatic
当调用一个不可访问(不存在)的静态方法,自动调用
callStatic(string $name,array $param):mixed
注意:需要修饰为静态
魔术方法 invoke
invoke([$…]):mixed
把对象当成函数调用的时候自动换行,并且会将实参传递带该魔术方法中
抽象类
限定子类必须编写方法,同时还能有一些通用的方法(属性)继承
语法:
类:abstract class 类名{}
方法:abstract public function 函数名();
1.如果类中有抽象方法,那类也必须定义为抽象类;
2.抽象类不能实例化
3.继承的抽象类中的所有方法必须实现(定义),可以添加形参但是必须兼容原有规则(抽象方法);
4.出了抽象方法以外,其他内容都按正常的继承来使用
