数据库连接常量php,类常量,属性重载,方法重载,数据库连接及静态方法重载实现-2019-10-10...

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

__get($name):当获取未定义可不见属性时触发  读操作

856407c80c6f8d9fe9e4eb383c820110.png

实例

namespace _10008;

class Demo3

{

private $name;

private $salary;

protected $secret = '其实都一样';

// 构造方法

public function __construct($name ,$salary)

{

$this->name = $name;

$this->salary = $salary;

}

// 属性重载的方法

public function __get($name)

{

return $this->$name;

}

}

$obj = new Demo3('毛老师',123);

echo $obj->name,'
';

?>

运行实例 »

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

__set($name, $value):当给未定义可不见属性赋值时触发  写操作

02e9a001b6d9088a18e77130059429ed.png

实例

namespace _10008;

class Demo3

{

private $name;

private $salary;

protected $secret = '其实都一样';

// 构造方法

public function __construct($name ,$salary)

{

$this->name = $name;

$this->salary = $salary;

}

// 属性重载的方法

// __get($name):当获取未定义可不见属性时触发  读操作

// $name 是属性名

public function __get($name)

{

return $this->$name;

}

// __set($name, $value):当给未定义可不见属性赋值时触发 写操作

public function __set($name, $value)

{

$this->$name = $value;

}

}

$obj = new Demo3('毛老师',123);

echo $obj->name,'
';

$obj->salary = '565';

echo $obj->salary;

echo '


';

?>

运行实例 »

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

__isset($name): 当检测未定义可不见属性时触发

8f14bb20072dd99515f9e290f2cae004.png

实例

namespace _10008;

class Demo3

{

private $name;

private $salary;

protected $secret = '其实都一样';

// 构造方法

public function __construct($name ,$salary)

{

$this->name = $name;

$this->salary = $salary;

}

// 属性重载的方法

// __get($name):当获取未定义可不见属性时触发  读操作

// $name 是属性名

public function __get($name)

{

return $this->$name;

}

// __set($name, $value):当给未定义可不见属性赋值时触发 写操作

public function __set($name, $value)

{

$this->$name = $value;

}

// __isset($name): 当检测未定义可不见属性时

public function __isset($name)

{

return isset($this->$name);

}

}

$obj = new Demo3('毛老师',123);

echo $obj->name,'
';

$obj->salary = '565';

echo $obj->salary;

echo '


';

echo isset($obj->salary) ? '存在' : '没有';

?>

运行实例 »

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

__unset($name): 当注销未定义可不见属性时触发

0af4804c2a20cd0e9fe8338241788245.png

实例

namespace _10008;

class Demo3

{

private $name;

private $salary;

protected $secret = '其实都一样';

// 构造方法

public function __construct($name ,$salary)

{

$this->name = $name;

$this->salary = $salary;

}

// 属性重载的方法

// __get($name):当获取未定义可不见属性时触发  读操作

// $name 是属性名

public function __get($name)

{

return $this->$name;

}

// __set($name, $value):当给未定义可不见属性赋值时触发 写操作

public function __set($name, $value)

{

$this->$name = $value;

}

// __isset($name): 当检测未定义可不见属性时

public function __isset($name)

{

return isset($this->$name);

}

//__unset($name): 当注销未定义可不见属性时触发

public function __unset($name)

{

unset($this->$name);

}

}

$obj = new Demo3('毛老师',123);

echo $obj->name,'
';

$obj->salary = '565';

echo $obj->salary;

echo '


';

echo isset($obj->salary) ? '存在' : '没有';

unset($obj->salary);

echo $obj->salary;

?>

运行实例 »

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

2. 实例演示call_user_func_array()回调执行函数/对象/类的方法的流程与方式

856fc92d30eb4b5c8b73d9abe196d0e1.png

实例

namespace _1008;

function sum($a, $b) {

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

}

// 正常函数调用

echo '正常函数调用: '.sum(20, 40);

echo '


';

// 对象方式调用

class Test1

{

public function sum($a,$b)

{

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

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

}

}

// 对象方式静态调用

class Test2

{

public static function sum($a,$b)

{

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

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

}

}

//echo call_user_func('\_1008\sum',20,60);

// 以回调的方式执行该函数

echo '回调的方式执行该函数:'.call_user_func(__namespace__.'\sum',20,60);

echo '


';

// 回调方式数组

echo '回调的方式执行该数组:'. call_user_func_array(__NAMESPACE__.'\sum',[8,99]);

echo '


';

$obj = new Test1();

echo '回调的方式执行该对象:'. call_user_func_array([$obj, 'sum'],[20,53]);

echo '


';

// ::class  ,返回一个带有命名空间的类名称

//echo '


',Test1::class;

echo '回调的方式执行该类:'. call_user_func_array([Test2::class, 'sum'], [15,22]);

?>

运行实例 »

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

3. 实例演示方法重载的实现原理与参数获取方式

e0f8fe5dbeebb6c74ce8999c5ff96990.png

实例

class Demo4

{

// __call(): 访问不存在/不可见对象方法时触发,有两个参数,第一个是方法名,第二个方法的参数

public function __call($name, $args)

{

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

'.print_r($args,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 Demo4::getInfo2('html','css','js');

?>

运行实例 »

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

4. 实例演示数据库链接调用的实现原理与过程(静态方法重载__callStatic实现)

805a28ca8512d0f07e2cf472399d0d3d.png

实例

namespace _1008;

// 查询数据库类

class Query

{

// 1. 连接对象

public $pao = null;

// 2. 表名

public $table;

// 3. 字段 * 查询所有字段

public $field = '*';

// 4. 条件

public $where;

// 5. 数量

public $limit;

// 6.连接数据库,用构造方法

public function __construct($pdo)

{

// 注:实例化时自动连接上数据库

$this->pdo = $pdo;

}

// 7. 设置数据表名称

public function table($tableName)

{

$this->table = $tableName;

//注:返回当前实例,用来链式调用后面的其他方法

return $this;

}

// 8. 设置数据库字段

public function field($fields = '*')

{

$this->field = empty($fields) ? '*' : $fields;

return $this;

}

// 9. 设置查询条件

public function where($where = '')

{

$this->where = empty($where) ? $where : ' WHERE '.$where;

return $this;

}

// 10. 设置显示数量

public function limit($limit)

{

$this->limit = empty($limit) ? $limit : ' LIMIT '. $limit;

return $this;

}

// 11. 生成sql语句

public function select()

{

// SELECT * FROM table WHERE **** LIMIT n

// 注:拼装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

{

// Q 1.1 链接对象

protected static  $pdo = null;

// 数据库的链接方法

public static function connection()

{

self::$pdo = new \PDO('mysql:host=127.0.0.1;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[0]]);

}

}

$staffs = DB::table(' staff')

->field(' staff_id,name,position,mobile')

->where('staff_id > 5')

->select();

foreach ($staffs as $staff){

print_r($staff);echo '
';

}

?>

运行实例 »

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值