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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
怎样去阅读一份php源代码
Aug 21 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
php实现多城市切换特效
Aug 09 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP生成随机数的方法总结
Mar 01 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
Laravel框架处理用户的请求操作详解
Dec 20 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/12/14 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
python django中8000端口被占用的解决
2019/12/17 Python
查询优化的一般准则有哪些
2015/03/08 面试题
令人印象深刻的自荐信
2014/05/25 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
先进典型发言材料
2014/12/30 职场文书
担保书格式
2015/01/20 职场文书
公司宣传语大全
2015/07/13 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python