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 header 跳转
Jun 17 PHP
解析php中反射的应用
Jun 18 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
php目录操作实例代码
Feb 21 PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
php生成无限栏目树
Mar 16 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
在laravel框架中实现封装公共方法全局调用
Oct 14 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 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中for循环语句的几种变型
2006/11/26 PHP
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php实现水仙花数示例分享
2014/04/03 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
django admin组件使用方法详解
2019/07/19 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
自我鉴定范文300字
2013/10/01 职场文书
农场厂长岗位职责
2013/12/28 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
运动会演讲稿100字
2014/08/25 职场文书
师范生见习报告范文
2014/11/03 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript