PHP面向对象
自动加载
唯一一个定义在类外的魔术方法(基本废弃)
function __autoload($class) { require __DIR__.'/'.$class.'.php'; }
新增spl_autoload_register函数(可以定义多个autoload函数,不会冲突) ```
Test1::test(); Test2::test();
function autoload1($class) { require DIR.'/'.$class.'.php'; }
function autoload2($class) { require DIR.'/'.$class.'.php'; }
### PSR-0规范
1. 命名空间必须与绝对路径一致
2. 类名首字母必须大写
3. 除入口文件外,其他“.php”必须只有一个类
## 有关PHP的数据结构
#### PHP的栈
$stack = new SplStack; $stack->push("data1\n"); $stack->push("data2\n");
echo $stack->pop(); echo $stack->pop();
#### PHP的队列
$queue = new SplQueue();
$queue->enqueue("data1\n"); $queue->enqueue("data2\n");
echo $queue->dequeue(); echo $queue->dequeue();
#### PHP的堆
$heap = new SplMinHeap();
$heap->insert("data1\n"); $heap->insert("data2\n");
echo $heap->extract(); echo $heap->extract();
#### PHP固定长度的数组
$array = new SplFixedArray(10);
$array[0] = 123; $array[9] = 1234;
var_dump($array);
## PHP的魔术方法
1. __get与__set方法
function __set($name, $value) { $this->array[$name] = $value;
}
function __get($name)
{
var_dump(__METHOD__);
return $this->array[$name];
}
2. __call与__callStatic方法
function __call($name, $arguments) { // TODO: Implement __call() method. var_dump($name, $arguments);
return "magic function\n";
}
static function __callStatic($name, $arguments)
{
// TODO: Implement __callStatic() method.
var_dump($name, $arguments);
return "magic function\n";
}
3. __toString方法(被当成字符串时调用)
function __toString() { // TODO: Implement __toString() method. return "magic function\n"; }
4. __invoke方法(被当成函数时调用)
function __invoke() { return "invoke"; }
# 工厂模式
1. 通过创建一个工厂类,可以免除多次new对象
class Factory { static function createDatabase() { $db = new Database();
return $db;
}
}
2. 需要创建对象时,直接调用工厂的静态方法
$db = \IMooc\Factory::createDatabase();
# 单例模式
1. 设置构造函数为私有方法,这样保证不能从外部创建
protected $db;
private function __construct() { }
2. 创建一个获取对象的静态方法,外部创建对象必须通过调用此方法
static function getInstance() { if (isset(self::$db)) { return self::$db; } else { self::$db = new self(); return self::$db;
}
}
3. 与工厂模式结合
class Factory { static function createDatabase() { $db = Database::getInstance();
return $db;
}
}
# 注册树模式
1. 创建一个注册类
相关文章
- 如何通过xhprof分析性能
使用方法 xhprof_enable(); /** ... 要检查的php代码 ... **/ $xhprof_data = xhprof_disable(); // 引入xhprof_lib i
- LUMEN API Controller 规范
1. 第三方依赖库规范 在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范 dingo/api : 实现API接口库 vlucas/phpdo
- PHP文件锁
共享锁(LOCK_SH) 什么时候加共享锁? 当在读取数据的时候同时进行着其他的写操作,这个时候需要对文件加共享锁,否则无论有没有对写操作加写锁都会写入成功,导致数据不一致 当文件获得共享锁时,其他
- Hello-Risen-程序
首先需要说明的是,您下载到的文件包含两部分,其中src中是开发源码,用于对Risen框架本身的开发,risen 目录中是通过源码生成的包含debug和release版本的框架程序,用于您应用程序的开发
- PHP自定义类示例(Weixin消息解析类)
PHP自定义类示例(Weixin消息解析类) /** * Created by Qingger. * User: jsspf * Date: 2017/3/24 * Time: 10:50
随机推荐
- 如何通过xhprof分析性能
使用方法 xhprof_enable(); /** ... 要检查的php代码 ... **/ $xhprof_data = xhprof_disable(); // 引入xhprof_lib i
- LUMEN API Controller 规范
1. 第三方依赖库规范 在使用LUMEN实现API接口时,以下库必须需要包含在composer包依赖中,以实现代码编写的一些规范 dingo/api : 实现API接口库 vlucas/phpdo
- PHP文件锁
共享锁(LOCK_SH) 什么时候加共享锁? 当在读取数据的时候同时进行着其他的写操作,这个时候需要对文件加共享锁,否则无论有没有对写操作加写锁都会写入成功,导致数据不一致 当文件获得共享锁时,其他
- Hello-Risen-程序
首先需要说明的是,您下载到的文件包含两部分,其中src中是开发源码,用于对Risen框架本身的开发,risen 目录中是通过源码生成的包含debug和release版本的框架程序,用于您应用程序的开发
- PHP自定义类示例(Weixin消息解析类)
PHP自定义类示例(Weixin消息解析类) /** * Created by Qingger. * User: jsspf * Date: 2017/3/24 * Time: 10:50