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分页示例代码
Mar 19 PHP
php短域名转换为实际域名函数
Jan 17 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
php微信公众号开发模式详解
Nov 28 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 PHP
如何重写Laravel异常处理类详解
Dec 20 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获取网页内容方法总结
2008/12/04 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
Javascript 复制数组实现代码
2009/11/26 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
2015/12/01 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Python工厂函数用法实例分析
2018/05/14 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
python 实现性别识别
2020/11/21 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
法警的竞聘演讲稿
2014/01/02 职场文书
计算机求职信
2014/07/02 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
学术会议邀请函
2015/01/30 职场文书
工程技术员岗位职责
2015/04/11 职场文书
中学生运动会广播稿
2015/08/19 职场文书