php trait 自动加载,自动加载及trait案例_1010

本文通过示例详细介绍了PHP中的命名空间自动加载和Trait的使用。首先,展示了如何利用`spl_autoload_register`函数实现类的自动加载,以此提高程序效率。接着,解释了Trait的功能,它允许代码复用,且在继承层次中,Trait的优先级高于父类。示例中创建了两个Trait并应用于Client类,实现了数据库连接和查询操作。
摘要由CSDN通过智能技术生成

// 1. 写一个分级的命名空间, 并实现类的自动加载

9280a68994e450ea26c3557520d9467b.png

demo2.php文件

实例

namespace int;

//自动加载函数

spl_autoload_register(function ($className){

//str_replace 字符串替换函数 (被替换的字符,DIRECTORY_SEPARATOR,字符串)

//DIRECTORY_SEPARATOR 系统目录分隔符

$path = str_replace('\\', DIRECTORY_SEPARATOR, $className);

$path = __DIR__ . '/' . $path . '.php';

//file_exists 检查如果$path文件存在,则加载此文件1次

if(file_exists($path)) include_once $path;

});

echo Test::demo();

运行实例 »

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

test.php文件

实例

namespace int;

class Test

{

public static function demo()

{

return __METHOD__;

}

}

运行实例 »

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

// 2. 写一个trait类, 理解它的功能与使用场景

d1141ef44fad2a672653df2c7ad1a249.png

实例

//子类 > trait > 父类

namespace _1010;

trait Db

{

public function connect($dsn, $username, $pwd)

{

return new \PDO($dsn, $username, $pwd);

}

}

trait Query

{

public function get($pdo, $where='')

{

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

$stmt   = $pdo->prepare('SELECT * FROM `staff` ' . $where . ' LIMIT 1');

$stmt->execute();

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

}

}

class Client

{

//在宿主类Client中引入上面声明的两个Trait类/方法集

use Db;

use Query;

public $pdo = null;

public function __construct($dsn,$username,$pwd)

{

$this->pdo = $this->connect($dsn,$username,$pwd);

}

public function find($where)

{

return $this->get($this->pdo,$where);

}

}

$dsn        = 'mysql:dbname=staff';

$username   = 'root';

$pwd        = 'root';

$client = new Client($dsn,$username,$pwd);

echo '

' . print_r($client->find('age>30'),true);

运行实例 »

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

小结:

1、自动加载,可以实现只需用到才加载,不用不加载,这样使程序运行更好;

2、trait使用级别,子类>trait>父类;trait也是方法集,使用trait好处市可以保存框架源码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值