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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
配置最新的PHP加MYSQL服务器
Oct 09 PHP
php网页后退不再出现过期
Mar 08 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
PHP冒泡排序算法代码详细解读
Jul 17 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
Yii框架日志记录Logging操作示例
Jul 12 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/07/02 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
Python语言的面相对象编程方式初步学习
2016/03/12 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
python如何统计代码运行的时长
2019/07/24 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
千手观音观后感
2015/06/03 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
AJAX学习笔记
2021/05/18 Javascript
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js