概述
一. 实例演示四个属性重载的魔术方法的使用方式
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 namespaceTest1();
//使用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 '
';
}
运行实例 »
点击 "运行实例" 按钮查看在线实例
最后执行结果:
总结:
先创建一个类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:迟来的作业,一步一步理解后把作业交上,希望老师多多谅解,,很多细节没有总结到位。希望老师批语
最后
以上就是鲜艳纸飞机为你收集整理的mysql 函数重载_10月8日作业,实战属性重载,方法重载,回调方法函数!的全部内容,希望文章能够帮你解决mysql 函数重载_10月8日作业,实战属性重载,方法重载,回调方法函数!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复