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框架的性能
Jan 10 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
php判断变量类型常用方法
Apr 24 PHP
thinkphp缓存技术详解
Dec 09 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
php变量与JS变量实现不通过跳转直接交互的方法
Aug 25 PHP
php递归函数怎么用才有效
Feb 24 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
PHP代码加密的方法总结
Mar 13 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
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
ThinkPHP查询语句与关联查询用法实例
2014/11/01 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
移动端点击态处理的三种实现方式
2017/01/12 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
node使用request请求的方法
2019/12/20 Javascript
Django的session中对于用户验证的支持
2015/07/23 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Python学习之os模块及用法
2020/06/03 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
自我鉴定三原则
2014/01/13 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
铲车司机岗位职责
2014/03/15 职场文书
财务检查整改报告
2014/11/06 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
商场收银员岗位职责
2015/04/07 职场文书
公司业务员管理制度
2015/08/05 职场文书
科级干部培训心得体会
2016/01/06 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis