PHP高级程序设计:模式、框架与测试 学习笔记
静态成员,作用域为自身。
使用静态,效率会高。是因为避免了实例化(会占用一小部分系统资源)
在使用::$变量 时,变量前要加“$”。是因为php当前不支持动态的静态变量的使用,也就是说,不支持可变的静态变量。
不用$时,访问的是类中的某个常量
class MyObject {public static $myVariable = 10;}echo MyObject::$myVariable; 在PHP中使用作用域限定操作符时,用变量作为类的名称是不允许的。eg: $classnameinvar::somemethod()
单列模式和工厂模式
单列模式被当作职责模式,(是因为它将创建对象的控制权委托到一个单一的访问点上。)它用来在应用程序中创建一个单一的功能访问点。在任何时候,应用程序中都只会有这个类仅有的一个实例存在。
必须拥有:
1. 一个构造函数,且必须被标记为private
2. 一个保存类的实例的静态成员变量
3. 一个访问这个实例的公共的静态方法
单列类不能在其他类中直接实例化。只能被其自身实例化。
class Database {private $_db;static $_instance;private function __construct() {$this->_db = pg_connect('dbname=example_db');}private __clone() {};public static function getInstance() {if( ! (self::$_instance instanceof self) ) {self::$_instance = new self();}return self::$_instance;}public function query($sql) {//Run a query using $this->_dbreturn pg_query($this->_db,$sql);}}
工厂模式在多态性设计中非常重要。是指包含了一个专门用来创建其他对象的方法的类。
它允许动态地替换类、修改配置,并且
异常
表示由try、catch和throw等语句和Exception类组成的整个处理机制
try 用来定义检测异常的代码块
catch 处理异常时的处理方法 catch ( Exception $e) { }
throw 语句是用来触发异常发生并且在这点上中断处理过程的。必须给它传递一个Exception
#debug_backtrace()
SPL序列化
<?phperror_reporting(E_ALL);class Base implements Serializable {private $baseVar;public function __construct() {$this->baseVar = 'foo';}public function serialize() {return serialize($this->baseVar);}public function unserialize($serialized) {$this->baseVar = unserialize($serialized);}public function printMe() {echo $this->baseVar . "\n";}public function ctest($test){echo $test;}}class Extender extends Base {private $extenderVar;public function __construct() {parent::__construct();$this->extenderVar = 'bar';}public function serialize() {$baseSerialized = parent::serialize();return serialize(array($this->extenderVar, $baseSerialized));}public function unserialize( $serialized ) {$temp = unserialize($serialized);$this->extenderVar = $temp;parent::unserialize($temp);}}$instance = new Extender();$serialized = serialize($instance);echo $serialized . "\n";$restored = unserialize($serialized);echo '<hr/>';$restored->printMe();$restored->ctest('xxoo');
页:
[1]