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 flv视频时间获取函数
Jun 29 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
Jun 27 PHP
php获取目标函数执行时间示例
Mar 04 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 PHP
php将字符串转换为数组实例讲解
May 05 PHP
PHP操作Redis常用命令的实例详解
Dec 23 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
PHP简单日历实现方法
2016/07/20 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
简单的php购物车代码
2020/06/05 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
python实现小球弹跳效果
2019/05/10 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
港湾网络笔试题
2014/04/19 面试题
单位接收函范文
2015/01/30 职场文书
死亡诗社观后感
2015/06/05 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
Pygame如何使用精灵和碰撞检测
2021/11/17 Python