方法重载与call_user_func_array()

1)方法重载:class Test

{

//普通方法的重载(如果没有__call方法,就不能在外部访问私有方法)

public function __call($name, $arguments)

{

//        return $name; //方法名称

//        return $arguments;

$arrs = implode(',',$arguments);

return '方法名:'.$name.'
参数:'.$arrs;

}

//创建一个私有方法

private function select()

{

return __METHOD__;

}

//静态方法的重载

public static function __callStatic($name, $arguments)

{

$arrs = implode(',',$arguments);

return '方法名:'.$name.'
参数:'.$arrs;

}

}

//实例化

$test = new Test;

//访问一个不存在的非静态/普通/动态方法

//echo $test->show();

print_r($test->show('合肥','杭州'));

echo $test->select('staff','id,name,age').'


';

//从类外部访问一个不存在的静态方法

echo Test::assign('html,css,php');

2) call_user_func_array()://场景一:执行回调函数

//计算两个整数之和

echo call_user_func_array(function($m,$n){return $m+$n;},[10,20]).'


';

//场景二:执行对象方法

class Hello1

{

public function add($m,$n)

{

return $m + $n;

}

}

//call_user_func_array([对象,'方法'],[参数数组])

//$obj = new Hello1();

//$method = 'add';

//$args = [30,50];

//echo call_user_func_array([$obj,$method],$args),'
';

//可以简写:

echo call_user_func_array([(new Hello1()),'add'],[35,40]).'


';

//场景三:执行类中的静态方法

class Hello2

{

public static function add($m,$n)

{

echo $m + $n;

}

}

//Hello2::add(20,30);   数组[类名,方法],[]

call_user_func_array(['Hello2','add'],[40,20]).'


';

2.后期静态绑定案例class Db1

{

public static $pdo = null;

public static function  connect()

{

self::$pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');

}

public static function query()

{

$stmt = self::$pdo->prepare("SELECT `name`,`salary` FROM `staff` LIMIT 3");

$stmt->execute();

return $stmt->fetchAll(PDO::FETCH_ASSOC);

}

public static function select()

{

self::connect();

return self::query();

}

}

class Db2 extends  Db1

{

public static function query()

{

$stmt = self::$pdo->prepare("SELECT `name` AS `姓名`,`email` AS `邮箱` FROM `user` LIMIT 3");

$stmt->execute();

return $stmt->fetchAll(PDO::FETCH_ASSOC);

}

}

echo '

';

print_r(Db1::select());

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐