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为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
PHP session会话的安全性分析
Sep 08 PHP
PHP5常用函数列表(分享)
Jun 07 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 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
其他功能
2006/10/09 PHP
php 清除网页病毒的方法
2008/12/05 PHP
php中几种常见安全设置详解
2010/04/06 PHP
php常量详细解析
2015/10/27 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
银行办理业务介绍信
2014/01/18 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
求职个人评价范文
2014/04/09 职场文书
贷款委托书
2014/08/01 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js