mysql 函数重载_10月8日作业,实战属性重载,方法重载,回调方法函数!

一. 实例演示四个属性重载的魔术方法的使用方式

1.__get($name)方法:当外部访问一个不存在或者无限性的属性时候自动调用

2.__set($name, $value)方法

3.__isset($name)测试属性存不存在调用;

4.__unset($name);删除一个方法;

下面Demo3类中四个方法同时展示

实例

namespace _1008;

//对象属性的重载技术

class Demo3

{

private $name;

private  $salary;

protected $secret='我***只有100元';

public function __construct($name,$salary)

{

$this->name=$name;

$this->salary=$salary;

}

//属性重载的方法,当外部访问一个不存在或者无限性的属性时候自动调用

public  function __get($name)

{

return $this->$name;

}

//写操作方法————set

public function __set($name, $value)

{

if ($name === 'salary') {

return $this->name === 'admin' ? $this->$name = $value : '无权更新工资';

}

return $this->$name = $value;

}

//isset测试属性存不存在使用

public  function __isset($name)

{

return isset($this->$name);

}

//删除方法__unset()

public  function __unset($name)

{

unset($this->$name);

}

}

$obj = new Demo3('admin', 6666);

echo $obj->name;

运行实例 »

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

二、echo call_user_func(),echo call_user_func_array();以函数参数的方式,执行一个函数,以回调的方式执行函数。

实例

实例

//创建一个函数

function sum($a,$b)

{

return"$a+$b=".($a+$b);

}

//使用echo call_user_func()方法

echo call_user_func(__NAMESPACE__.'\sum',130,66);

echo '


';

//使用call_user_func_array()方法

echo call_user_func_array(__NAMESPACE__.'\sum',[500,600]);

echo '


';

运行实例 »

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

实例

//创建一个类

class Test1

{

function sum($a,$b)

{

return"$a+$b=".($a+$b);

}

}

//实例化 new

$obj=new namespace\Test1();

//使用echo call_user_func()方法

echo call_user_func_array([$obj,'sum'],[800,700]);

echo '


';

使用call_user_func_array()方法

echo call_user_func_array([new Test1(),'sum'],[80,70]);

echo '


';

运行实例 »

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

实例

//创建一个类,类里有一个静态方法

class Test2

{

public static function sum($a,$b)

{

return"$a+$b=".($a+$b);

}

}

//使用echo call_user_func()方法

echo call_user_func_array(__NAMESPACE__.'\Test2::sum',[66,88]);

echo '
';

//使用call_user_func_array()方法

echo call_user_func_array([Test2::class,'sum'],[96,808]);

运行实例 »

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

三、方法重载,1.__call, 2__callstatic;

实例

//创建一个类,使用__call(),__callstatic(),

class Demo4

{

// 普通方法,重载 __call

public function __call($name, $arguments)

{

return '方法是:'.$name.'
参数列表:

'.print_r($arguments,true);

}

//静态方法,重载 __callstatic

public static function __callStatic($name, $arguments)

{

return '方法是:'.$name.'
参数列表:

'.print_r($arguments,true);

}

}

echo '


';

$obj=new Demo4();

echo $obj->getInfo1(10,20,30);

echo '


';

echo Demo4::getInfo2('html','css','js');

运行实例 »

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

四、.实例演示数据库链接调用的实现原理与过程(静态方法重载__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;

}

//生成SQL语句

public function select(){

//拼接SQL语句

$sql=' SELECT '.$this->field.' FROM ' . $this->table.$this->where.$this->limit;

//预处理

$stmt = $this->pdo->prepare($sql);

$stmt->execute();

//        die($stmt->debugDumpParams());  // 查看生成的sql

return $stmt->fetchall(\PDO::FETCH_ASSOC);

}

}

运行实例 »

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

实例

namespace _1008;

require 'Query.php';

class DB

{

protected  static $pdo=null;

//数据库的链接方法

public  static function connection()

{

//连接 ouyangke 数据库

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

}

public static function __callStatic($name, $arguments)

{

//链接数据库

self::connection();

//实例化查询类

$query=new Query(self::$pdo);

//调用查询对象$query中的对应方法

return call_user_func_array([$query,$name],$arguments);

}

}

$mov=DB::table('movies')

->field('mov_id,name')

->limit(5)

->where('mov_id>2')

->select();

//遍历数据

foreach ($mov as $m){

print_r($m);

echo '
';

}

运行实例 »

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

最后执行结果:

c9eb9a80df6ed999c05c69d7603cd704.png

总结:

先创建一个类Query.php,创建一个query类,用于数据库的连接查询,设置对象属性;public $pdo=null;public $table;public $field='*';public $where;public $limit;,使用构造方法连接数据库,给对象属性设置方法以便调用,最后生成SQL语句, 加预处理!

再创建一个demo5.php文档,把'Query.php'连接进来,建立了一个DB类,类里面设置静态方法connection()连接数据库,使用静态重载方法__callStatic,连接数控,在类中实例化Query.php中的query类,调用里面的查询方法。注意关键字'SELECT ' ' WHERE ' ' LIMIT '的前后空格,使用 die($stmt->debugDumpParams());查看生成的sql语句 SELECT mov_id,name FROM movies WHERE mov_id>2 LIMIT 5 在这里,我连接了 ‘ouyangke’数据库,然后查询为movies的数据表,根据查询条件 查询,表里的mov_id,name,按查询方法,我只要mov_id>2的条目,只需查询到的数据要前5条!

ps:迟来的作业,一步一步理解后把作业交上,希望老师多多谅解,,很多细节没有总结到位。希望老师批语

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值