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 HTML代码串截取代码
Dec 29 PHP
PHP 一个页面执行时间类代码
Mar 05 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
解析php入库和出库
Jun 25 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 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
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
理解JavaScript中的事件
2006/09/23 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
Python WSGI的深入理解
2018/08/01 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
PyQt5响应回车事件的方法
2019/06/25 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
上课迟到检讨书
2014/01/19 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
四风对照检查材料范文
2014/09/27 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年收银工作总结
2014/11/13 职场文书
幼儿教师个人总结
2015/02/05 职场文书
联欢会开场白
2015/06/01 职场文书
音乐研修感悟
2015/11/18 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS