首页 > 编程语言 >php类自动装载、链式操作、魔术方法

php类自动装载、链式操作、魔术方法

时间:2023-02-01 13:03:27浏览次数:35  
标签:__ function return echo 魔术 链式 php class

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、链式操作

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');



标签:__,function,return,echo,魔术,链式,php,class
From: https://blog.51cto.com/u_2820398/6031399

相关文章

  • PHP读取流文件
    $filepath='http://www.vip.com/down';$fp=fopen($filepath,"r");Header("Content-type:application/octet-stream");Header("Ac......
  • PHP一个典型的闭包实例
    <?php//一个基本的购物车,包括一些已经添加的商品和每种商品的数量。//其中有一个方法用来计算购物车中所有商品的总价格,该方法使//用了一个closure作为回调函数。class......
  • php使用魔法函数和不使用魔法函数比较
    /***usemagic0.31868386268616s*notusemagic0.11876797676086s*/classTest{private$varstr="123";function__get($name){return$this->vars......
  • PHP 将内容保存为Excel
    //使用这一对Header,程序中所有输出内容会保存至一份excel中并下载header('Content-type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');head......
  • PHP实现生成二维码代码展示
    本文为小伙伴们带来的是关于PHP实现生成二维码代码展示,前言为了满足用户渠道推广分析和用户账号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可......
  • PHPMyWind支持Word自动导入
    ​ 项目需求可发布文章需求涉及到富文本编辑器经过查阅我选择了较为简便不需要后端支持可独立完成的tinymce框架官方文档也是相当完整虽然都是全英文但是有强大的......
  • PHPMyWind支持Word自动上传
    ​ 当前功能基于PHP,其它语言流程大致相同 1.新增上传wordjson配置在ueditor\php\config.json中新增如下配置:     /* 上传word配置 */    "wordAction......
  • php in_array 遍历,in_array大数组查询性能问题
    问题最近在实现一个项目接口的时候发现当数组过大的时候,数据返回的速度有点慢。接口数据返回最长反应时间2s,经过反复调试发现代码段耗时最长的部分在in_array()函数。解决......
  • PHPMyWind编辑器支持PowerPoint上传
    ​ 1.编辑器修改(可选)1.1在 ueditor/config.json 中添加代码块    /* 上传word配置 */    "wordActionName":"wordupload",/* 执行上传视频的action......
  • phpstorm xdebug设置
    填写上配置的url地址即可,端口如果不是80就自己填写为自己设置的端口最后打开顶部调试模式startlisiteningforphpdebug设置断点访问地址添加上?XDEBUG_SESSION......