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 加密与解密的斗争
Apr 17 PHP
php ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
php与mysql建立连接并执行SQL语句的代码
Jul 04 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
php从完整文件路径中分离文件目录和文件名的方法
Mar 13 PHP
php从字符串创建函数的方法
Mar 16 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP实现登录验证码校验功能
May 17 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 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 allow_url_include的应用和解释
2010/04/22 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
img标签中onerror用法
2009/08/13 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
django2 快速安装指南分享
2018/01/05 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
python中bytes和str类型的区别
2019/10/21 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
信息技术培训感言
2014/03/06 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
单位接收函格式
2015/01/30 职场文书
个人总结格式范文
2015/03/09 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python