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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
php生成带logo二维码方法小结
Apr 08 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 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下通过POST还是GET来传值
2008/06/05 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
php二分查找二种实现示例
2014/03/12 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
Javascript倒计时代码
2010/08/12 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Python中__name__的使用实例
2015/04/14 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
详解Python中的正则表达式
2018/07/08 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
旅游管理专业学生求职信
2013/09/28 职场文书
计算机大学生的自我评价
2013/10/15 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python