1、自动装载实例
目录下有3个文件:index.php load.php tests文件夹
tests文件夹里有 test1.php
1
2
3
4
5
6
7
8
|
<?php namespace Tests; class Test1{ static function test(){ echo __CLASS__ . '<br>' ; echo __FILE__ . '<br>' ; } } |
index.php内容
1
2
3
|
<?php include "load.php" ; Tests\Test1::test(); |
load.php内容
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?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 链式操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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() 方法会被自动调用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?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 ); } } |
1
2
3
4
5
6
7
|
$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中自动装载、链式操作、魔术的实现代码,需要的朋友可以参考一下。
原文链接:http://www.cnblogs.com/gide/p/5237600.html