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 调试工具Debug Tools
Apr 30 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
php除数取整示例
Apr 24 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
php字符串函数学习之strstr()
Mar 27 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
Jan 04 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
快速解决PHP调用Word组件DCOM权限的问题
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源码之 ext/mysql扩展部分
2009/07/17 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
Javascript !!的作用
2008/12/04 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
了解重排与重绘
2019/05/29 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
Python2包含中文报错的解决方法
2018/07/09 Python
基于python实现KNN分类算法
2020/04/23 Python
python requests指定出口ip的例子
2019/07/25 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
行政人员工作职责
2013/12/05 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
战友聚会主持词
2014/04/02 职场文书
协议书格式
2014/04/23 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
Python实现生活常识解答机器人
2021/06/28 Python