面象对象 自学二

来源:互联网 发布:淘宝上下架查询小助手 编辑:程序博客网 时间:2024/06/11 21:06

一,实现接口

接口可以看作是多重继承问题的解决方法,而且类似于其他面向对象编程语言所支持的接口实现。

接口的思想是指定一个实现了该接口的类必须实现的一系列函数。

interface Displayable {

    function display();

}

class webPage implements Displayable {

    function display() {}

}

二,面象对象高级功能

1,const  这个常量可以在不需要初始化该类的情况下使用。

class Math {

    const pi = 3.1415;

}

echo Math::pi;

2,实现静态方法 static

class Math {

    static function squared($input) {

        return $input*$input;

    }

}

echo Math::squared(8);

3,检查类的类型和类型提示   instanceof

允许检查一个对象的类型,可以检查一个对象是否是特定类的实例,是否是从某个类继承过来或者是否实现了某个接口。是一个高效率的条件操作符。

{$b instanceof B}  return true;

{$b instanceof Displayable}  return false;

以上两个类似于

function check_hint(B $someclass) {}

4,廷迟静态绑定

5.3版本引入了廷迟静态绑定概念,该特性允许在一个静态继承的上下文中对一个被调用类的引用。父类可以使用子类重载的静态方法。

5,克隆对象  clone

__clone()

6,使用抽象类

abstract operationX($param1, $param2);

abstract class A{

    abstract function operationX($param1, $param2);

}

7,使用__call()重载方法

public function __call($method, $p) {
if ($method == "display") {
if (is_object($p[0])) {
$this->displayObject($p[0]);
}
else if (is_array($p[0])) {
$this->displayArray($p[0]);
}
else {
$this->displayScalar($p[0]);
}
}
}
$ov = new overload;
$ov = display(array(1,2,3));
$ov = display('cat');

8,使用__autoload

该方法的主要用途是尝试包含或请求任何用来初始化所需类的文件。

function __autoload($name) {

    include_once $name.".php";

}

该代码实现将包含一个具有与该类相同名称的文件。

三,实现迭代器和迭代

PHP面象对象引擎的一个特性,可以使用foreach()方法通过循环方式取出一个对象的所有属性。

/**
 * 迭代器和迭代
 * zhangming   2014-06-11
 */
class ObjectIterator implements Iterator {
private $obj;
private $count;
private $currentIndex;
//把文件名当成类名,快速初始化类
function __construct($obj) {
$this->obj = $obj;
}

//
function rewind() {
return $this->currentIndex = 0;
}

//
function valid() {
return $this->currentIndex < $this->count;
}

//
function key() {
return $this->currentIndex;
}

//
function current() {
return $this->obj->data[$this->currentIndex];
}

//
function next() {
$this->currentIndex++;
}
}


/**
 * 
 */
class Object implements IteratorAggregate {

public $data = array();

//
function __construct($in) {
$this->data = $in;
}

//
function getIterator() {
return new ObjectIterator($this);
}
}


/**
 * 
 */
$myObject = new Object(array(2,4,6,8,10));


$myIterator = $myObject->getIterator();
echo $myIterator->next();die;
for ($myIterator->rewind(); $myIterator->valid(); $myIterator->next()) {
$key = $myIterator->key();
$value = $myIterator->current();
echo $key." => ".$value."<br/>";
}

四,将类转换成字符串  __toString()


0 0