2020年5月24日
<?php
class 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);
<?php
class 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);
<?php
class 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.出了抽象方法以外,其他内容都按正常的继承来使用