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 06 PHP
PHP中的函数嵌套层数限制分析
Jun 13 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
php访问数组最后一个元素的函数end()用法
Mar 18 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 PHP
laravel通用化的CURD的实现
Dec 13 PHP
Yii 框架使用Forms操作详解
May 18 PHP
PHP7 其他语言层面的修改
Mar 09 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显示搜索引擎来的关键词
2014/02/13 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
python实现在windows下操作word的方法
2015/04/28 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
活动策划邀请函
2014/02/06 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
股东协议书范本2016
2016/03/21 职场文书