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中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
33道php常见面试题及答案
Jul 06 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
php while循环控制的简单实例
May 30 PHP
php基于协程实现异步的方法分析
Jul 17 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牛逼的面试题分享
2013/01/18 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
计算机专业大学生的自我评价
2013/11/14 职场文书
运动会广播稿400字
2014/01/25 职场文书
小学生成长感言
2014/01/30 职场文书
初中同学聚会感言
2014/02/11 职场文书
《雾凇》教学反思
2014/02/17 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
教师党员个人自我评价
2015/03/04 职场文书