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中GET变量的使用
Oct 09 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
PHP 万年历实现代码
Oct 18 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
PHP编程基本语法快速入门手册
Jan 07 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
PHP在线打包下载功能示例
Oct 15 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
PHP如何使用cURL实现Get和Post请求
Jul 11 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+APACHE实现用户论证的方法
2006/10/09 PHP
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python删除特定文件的方法
2015/07/30 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
2015年元旦活动总结
2014/05/09 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
先进事迹材料范文
2014/12/29 职场文书
警告通知
2015/04/25 职场文书
观后感开头
2015/06/19 职场文书
军事理论课感想
2015/08/11 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
tomcat下部署jenkins的方法
2022/05/06 Servers