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 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
php读取数据库信息的几种方法
May 24 PHP
PHP 读取文件的正确方法
Apr 29 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
简单的cookie计数器实现源码
Jun 07 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
百度实时推送api接口应用示例
Oct 21 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 12 PHP
如何理解PHP核心特性命名空间
May 28 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
神族 Protoss 历史背景
2020/03/14 星际争霸
在PHP中操作Excel实例代码
2010/04/29 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
PHP实现百度人脸识别
2019/05/06 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
javascript中的new使用
2010/03/20 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
python实现博客文章爬虫示例
2014/02/26 Python
在Python的web框架中配置app的教程
2015/04/30 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
python中pop()函数的语法与实例
2020/12/01 Python
.NET常见笔试题集
2012/12/01 面试题
平面设计师的工作职责
2013/11/21 职场文书
高三生物教学反思
2014/01/25 职场文书
运动会稿件200字
2014/02/07 职场文书
班级安全教育实施方案
2014/02/23 职场文书
运动会班级口号
2014/06/09 职场文书
民事赔偿协议书
2014/11/02 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang