php类自动装载、链式操作、魔术方法实现代码


Posted in PHP onJuly 23, 2017

1、自动装载实例

目录下有3个文件:index.php load.php tests文件夹

tests文件夹里有 test1.php

<?php
namespace Tests;
class Test1{
  static function test(){
    echo __CLASS__.'<br>';
    echo __FILE__.'<br>';
  }
}

index.php内容

<?php
include "load.php";
Tests\Test1::test();

load.php内容

<?php
class Loader
{
  static function loadClass($class)
  {
    $class =  __DIR__.DIRECTORY_SEPARATOR.str_replace('\\','/',$class).'.php';
    if (file_exists($class)) {
      include $class;
      return;
    }
  }
}
spl_autoload_register(array('Loader','loadClass'));

2、php 链式操作

namespace Baobab;

class Database{
 function where($where){
  return $this;
 }
 
 function order($order) {
  return $this;
 }
 
 function limit($limit){
  return $this;
 }
}

?>

//index.php
$db = new Baobab\Database();
$db->where('id = 1')->order('order by id')->limit(1);

3、魔术方法:

__get/__set:接管对象属性。在给不可访问属性赋值时,

__set() 会被调用;读取不可访问属性的值时,__get() 会被调用。

__call/__callStatic:在对象中调用一个不可访问方法时,__call() 会被调用;用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。

__toString:一个类转化成字符串

__invoke:以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

<?php
namespace Baobab;

class Object{
 protected $array = array();
 function __set($key, $value){
  $this->array[$key] = $value;
 }
 function __get($key){
  //echo __METHOD__;
  return $this->array[$key];
 }
 
 function __call($func, $param){
  //var_dump($func,$param);
  return 'magic function';
 }
 
 static function __callstatic($func, $param) {
  //var_dump($func, $param);
  return 'magic static function';
 }
 
 function __toString(){
  return __CLASS__;
 }
 
 function __invoke($param) {
  return var_dump($param);
 }
 
}
$obj = new baobab\Object();
$obj->title = 'hello';
echo $obj->title;
echo $obj->test1('hello', 123);
echo $obj::test1('hello1', 1234);
echo $obj;
echo $obj('test1');

以上就是php中自动装载、链式操作、魔术的实现代码,需要的朋友可以参考一下。

PHP 相关文章推荐
php基础教程 php内置函数实例教程
Aug 21 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Jun 12 PHP
PHP实现简单汉字验证码
Jul 28 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
laravel自定义分页效果
Jul 23 #PHP
PHP批量删除jQuery操作
Jul 23 #PHP
PHP mysqli事务操作常用方法分析
Jul 22 #PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 #PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 #PHP
PHP编程快速实现数组去重的方法详解
Jul 22 #PHP
php使用ftp实现文件上传与下载功能
Jul 21 #PHP
You might like
PHP4中实现动态代理
2006/10/09 PHP
构建简单的Webmail系统
2006/10/09 PHP
Destoon模板制作简明教程
2014/06/20 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php限制文件下载速度的代码
2015/10/20 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
JavaScript中的私有成员
2006/09/18 Javascript
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
python入门前的第一课 python怎样入门
2018/03/06 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
药品营销策划方案
2014/06/15 职场文书
法定授权委托证明书
2014/09/27 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
vue+spring boot实现校验码功能
2021/05/27 Vue.js
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
python使用BeautifulSoup 解析HTML
2022/04/24 Python