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
php5 图片验证码实现代码
Dec 11 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
apache php模块整合操作指南
Nov 16 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 PHP
php 指定范围内多个随机数代码实例
Jul 18 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
laravel 实现设置时区的简单方法
Oct 10 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 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
Python编程实现生成特定范围内不重复多个随机数的2种方法
2017/04/14 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
详解python中init方法和随机数方法
2019/03/13 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
python getpass模块用法及实例详解
2019/10/07 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
运动会方阵解说词
2014/02/12 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
争先创优公开承诺书
2014/08/30 职场文书
党支部书记岗位职责
2015/02/15 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL