深入php面向对象和模式

前两章是php历史和概论,略过。

第三章 对象基础

3.1 类和对象

类,是用于生成对象的代码模版。

public 公有的,都可调用。

protected 保护的, 只有本类和子类可以调用。

private 私有的, 只有本类可以调用,子类也不能。

 

使用->来调用类的属性和方法: $product->title 

 

构造方法:__construct()  会被自动调用。

 

继承: extends

子类继承父类会在实例化的时候自动调用所有public 和 protected方法。
要引用一个类而不是对象的方法,可以使用::而不是->, 所以 parent::__construct()

 

静态方法: static 以类作为作用域的函数。 
class StaticExample {
  static public $num=0;
  static public function sayHello() {
        print "hello";
  }
}

print StaticExample::$num;
StaticExample::sayHello();

要从当前类(不是子类)中访问静态方法或属性,可以使用self关键字
self::$num;

根据定义, 我们不能在对象中调用静态方法, 因此静态方法和属性又被称为类变量和属性。因此不能在静态方法中使用伪变量$this

 

常量属性: const     一般只能用大写字母来命名常量
const AVAILABLE = 0;

像静态属性一样, 只能通过类而不能通过类的实例访问常量属性。

 

抽象类: abstract 
抽象类不能直接被实例化,抽象类中只定义(或部分定义)子类需要的方法。子类可以继承它并且通过实现其中的抽象方法,使抽象类具体化。
abstract public function write();
抽象类的每个子类都必须实现抽象类中的所有抽象方法。

 

接口: interface 接口职能定义功能,而不包含实现的内容。
interface Chargeable {
  public function getPrice();
}
任何实现接口的类都要实现接口中所定义的所有方法。

 

抛出异常: 使用throw 和 Exception对象来抛出异常,这会停止执行当前方法。
if($i=0){
  throw new Exception('this is a error message');
}

或
try{
...
} catch (Exception $e) {
...
}

 

析构方法: 在对象被垃圾收集器收集前(即对象从内存中删除之前)自动调用。
__destruct()

 

__clone()复制对象

class CopyMe {}
$first = new CopyMe();
$second = $first;
//php4: $second和$first是两个完全不同的对象。
//php5: $second和$first指向同一个对象。

php中对象的赋值和传递都是通过引用进行的。

回调 

一个简单的回调案例

  function f1($arg1, $arg2)
  {
	echo __FUNCTION__.'exec, the args is:'.$arg1.' '.$arg2;
	echo "<br>";
  }
  call_user_func('f1', 'han', 'wen');
  call_user_func_array('f1', array('f1', array('han', 'wen')));

目前在我看来回调函数就是通过函数call_user_func和call_user_func_array来指定函数名和参数来调用函数,具体用途还不太清楚。

匿名函数和闭包Closure

$func = function() {
    
}; //带结束符

  

$func = function( $param ) {
    echo $param;
};

$func( 'some string' );

//输出:
//some string

 这篇文章不错http://www.cnblogs.com/melonblog/archive/2013/05/01/3052611.html

 顺便发现一个强大函数preg_replace_callback  

 对象与设计

内聚: 是一个模块内部各成分之间相关联程度的度量。

耦合:紧密相连,依赖太重

posted @ 2015-04-19 13:37  derrck  阅读(469)  评论(0编辑  收藏  举报