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扩展ZF――Validate扩展
Jan 10 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
2014过年倒计时示例
Jan 31 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
PHP中include和require的区别实例分析
May 07 PHP
浅析php如何实现爬取数据原理
Sep 27 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
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 has encountered an Access Violation
2007/01/15 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
Javascript的一种模块模式
2010/09/08 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
python字典排序实例详解
2015/05/20 Python
Python序列类型的打包和解包实例
2019/12/21 Python
使用Tkinter制作信息提示框
2020/02/18 Python
Django使用rest_framework写出API
2020/05/21 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
财务出纳员岗位职责
2013/11/26 职场文书
班会关于环保演讲稿
2013/12/29 职场文书
九月份红领巾广播稿
2014/01/22 职场文书
单位创先争优活动方案
2014/01/26 职场文书
致全体运动员广播稿
2014/02/01 职场文书
毕业生自荐书
2014/02/02 职场文书
大学生简历求职信
2014/06/24 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
教师调动申请报告
2015/05/18 职场文书
基层工作经历证明
2015/06/19 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
Python 批量下载阴阳师网站壁纸
2021/05/19 Python