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 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php身份证号码检查类实例
Jun 18 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
PHP7常量数组用法分析
Sep 26 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
PHP获取当前执行php文件名的代码
Mar 02 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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 IN_ARRAY 函数使用注意事项
2010/07/24 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
Python中的作用域规则详解
2015/01/30 Python
详解Python中break语句的用法
2015/05/14 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
Html5跳转到APP指定页面的实现
2020/01/14 HTML / CSS
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
配置管理计划的主要内容有哪些
2014/06/20 面试题
借款协议书范本
2014/04/22 职场文书
2014年政协工作总结
2014/12/09 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android