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 相关文章推荐
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
PHP URL地址获取函数代码(端口等) 推荐
May 15 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
Mar 22 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 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
模仿OSO的论坛(一)
2006/10/09 PHP
php获取网页内容方法总结
2008/12/04 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
PHP实现验证码校验功能
2017/11/16 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python实现基本线性数据结构
2016/08/22 Python
python如何获取服务器硬件信息
2017/05/11 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
八一建军节感言
2014/02/28 职场文书
活动总结报告怎么写
2014/07/03 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python