php类自动装载、链式操作、魔术方法实现代码
程序员文章站
2024-03-11 18:59:43
1、自动装载实例
目录下有3个文件:index.php load.php tests文件夹
tests文件夹里有 test1.php
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中自动装载、链式操作、魔术的实现代码,需要的朋友可以参考一下。