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边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
实用函数9
Nov 08 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
php实现文件下载实例分享
Jun 02 PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
PHP多进程编程实例详解
Jul 19 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
php微信开发之音乐回复功能
Jun 14 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 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
flash用php连接数据库的代码
2011/04/21 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
javaScript复制功能调用实现方案
2012/12/13 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
基于python绘制科赫雪花
2018/06/22 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
物业管理毕业生个人的求职信
2013/11/30 职场文书
施工资料员的岗位职责
2013/12/22 职场文书
员工考核管理制度
2014/02/02 职场文书
服务理念口号
2014/06/11 职场文书
工作一年自我鉴定
2019/06/20 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
python Tkinter模块使用方法详解
2022/04/07 Python
ant design vue的form表单取值方法
2022/06/01 Vue.js
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS