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 cookis创建实现代码
Mar 16 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
php的闭包(Closure)匿名函数详解
Feb 22 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
Feb 23 PHP
PHP无限极分类函数的实现方法详解
Apr 15 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PHP count()函数讲解
Feb 03 PHP
php+iframe 实现上传文件功能示例
Mar 04 PHP
php判断数组是否为空的实例方法
May 10 PHP
laravel数据库查询结果自动转数组修改实例
Feb 27 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
php桥接模式应用案例分析
2019/10/23 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
Python中字典映射类型的学习教程
2015/08/20 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
django项目搭建与Session使用详解
2018/10/10 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
python sorted方法和列表使用解析
2019/11/18 Python
python中的逆序遍历实例
2019/12/25 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
仓库主管岗位职责
2014/03/02 职场文书
意向协议书范本
2014/04/23 职场文书
活动总结格式范文
2014/04/26 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL