实例
namespace _1008;
// 属性重载
// __get(), __set(), __isset(), __unset()
class monkey{
private $name;
private $food;
protected $achieve ='96';
public function __construct($name,$food)
{
$this->name = $name;
$this->food = $food;
}
// __get()
public function __get($name)
{
if(property_exists($this,$name)){
return $this -> $name;
}else{
return '没有找到相应数据!';
}
}
//__set()
public function __set($name, $value)
{
if(property_exists($this,$name)){
return $this->$name =$value;
}else{
return '没有找到相应数据!';
}
}
//isset()
public function __isset($name)
{
return isset($this->$name);
}
//unset()
public function __unset($name)
{
unset($this->name);
}
}
$obj = new monkey('孙悟空','香蕉');
echo '__get()'.'
';
echo '小猴的名字是:'.$obj->name.',他喜欢的食物是:'.$obj->food;
echo '
';
echo '__set()'.'
';
$obj ->name ='六耳猕猴';
$obj ->food='蟠桃';
echo '小猴的名字是:'.$obj->name.',他喜欢的食物是:'.$obj->food;
echo '
';
echo '__isset()'.'
';
var_dump(isset($obj->name));
echo '
';
var_dump(isset($obj->foods));
?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
2. 实例演示call_user_func_array()回调执行函数/对象/类的方法的流程与方式
实例
namespace _1008;
function pro($a,$b){
echo "{$a}*{$b}=".$a*$b;
}
echo pro(2,5).'
';
echo call_user_func(__NAMESPACE__.'\pro',4,9);
echo '
';
echo call_user_func_array(__NAMESPACE__.'\pro',[9,8]);
echo '
';
class demo2{
public function pro($a,$b){
return "{$a}*{$b}=".$a * $b;
}
}
$obj = new demo2();
echo call_user_func_array([$obj,'pro'],[5,8]);
echo '
';
class demo02{
public static function pro($a,$b){
return "{$a}*{$b}=".$a * $b;
}
}
echo call_user_func_array([new demo02(),'pro'],[9,9]);
?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
3. 实例演示方法重载的实现原理与参数获取方式
实例
namespace _1008;
class demo3{
public function __call($name, $arguments)
{
return $name. '
数据列表:
'.print_r($arguments,true);
}
public static function __callStatic($name, $arguments)
{
return $name. '
数据列表:
'.print_r($arguments,true);
}
}
$obj = new demo3();
echo $obj->one(1,2,3,4,5,6);
echo '
';
echo demo3::two('一','二','三','四','五');
?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
4. 实例演示数据库链接调用的实现原理与过程(静态方法重载__callStatic实现)
实例
namespace _1008;
class Query
{
public $pdo = null;
public $table;
public $field = '*';
public $where;
public $limit;
public function __construct($pdo)
{
$this->pdo = $pdo;
}
public function table($tableName)
{
$this->table = $tableName;
return $this;
}
public function field($fields = '*')
{
$this->field = empty($fields) ? '*' : $fields;
return $this;
}
public function where($where = '')
{
$this->where = empty($where) ? $where : ' WHERE '. $where;
return $this;
}
public function limit($limit)
{
$this->limit = empty($limit) ? $limit : ' LIMIT '. $limit;
return $this;
}
public function select()
{
$sql = 'SELECT '
. $this->field
. ' FROM '
. $this->table
. $this->where
. $this->limit;
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
class db{
protected static $pdo =null;
public static function connection(){
self::$pdo =new \PDO('mysql:host=www.phpxuexi.com;dbname=php', 'root', 'root');
}
public static function __callStatic($name, $arguments)
{
self::connection();
$query = new query(self::$pdo);
return call_user_func_array([$query,$name],$arguments);
}
}
$mobile = db::table('mobile')
->field('id,name')
->where('price > 3000')
->select();
foreach ($mobile as $mobile){
print_r($mobile);
echo '
';
}
?>
运行实例 »
点击 "运行实例" 按钮查看在线实例