php作业案例10,类重载及实例-2019-10-08

实例

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 '
';

}

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值