我是靠谱客的博主 鲜艳纸飞机,最近开发中收集的这篇文章主要介绍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 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 '
';

}

运行实例 »

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

最后执行结果:

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:迟来的作业,一步一步理解后把作业交上,希望老师多多谅解,,很多细节没有总结到位。希望老师批语

最后

以上就是鲜艳纸飞机为你收集整理的mysql 函数重载_10月8日作业,实战属性重载,方法重载,回调方法函数!的全部内容,希望文章能够帮你解决mysql 函数重载_10月8日作业,实战属性重载,方法重载,回调方法函数!所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部