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 相关文章推荐
一个可查询所有表的“通用”查询分页类
Oct 09 PHP
在php中使用sockets:从新闻组中获取文章
Oct 09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
php数组中删除元素的实现代码
Jun 22 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
thinkPHP多表查询及分页功能实现方法示例
Jul 03 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
php插件Xajax使用方法详解
Aug 31 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 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
php array_merge下进行数组合并的代码
2008/07/22 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
2013/06/04 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
老生常谈Python进阶之装饰器
2017/05/11 Python
Python模块文件结构代码详解
2018/02/03 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python内存管理机制原理详解
2019/08/12 Python
python编写猜数字小游戏
2019/10/06 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
学生实习介绍信
2014/01/15 职场文书
干部现实表现材料
2014/02/13 职场文书
公司新年寄语
2014/04/04 职场文书
《忆江南》教学反思
2014/04/07 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
批评与自我批评总结
2014/10/17 职场文书
水电工程师岗位职责
2015/02/13 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python