面象对象 自学二
来源:互联网 发布:淘宝上下架查询小助手 编辑:程序博客网 时间: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()
- 面象对象 自学二
- 面象对象 自学一
- 面象对象
- java 面象对象
- C#面象对象1
- C#面象对象2
- PHP中的面象对象
- JavaScript面象对象设计
- 面象对象设计总结
- 面象对象设计原则
- 黑马程序员--面象对象
- 面象对象的面试题
- [设计模式学习笔记][之二]面象对象单挑结构化设计
- 面象对象设计6大原则之二:开放封闭原则
- 面象对象设计的原则
- C#面象对象学习:委托(delegate)
- c与面象对象之继承
- 面象对象设计的基本原则
- 6.9引蜘蛛。十五
- all about AIX MPIO
- 6.9引蜘蛛。十六
- 6.9引蜘蛛。十七
- 6.9引蜘蛛。十八
- 面象对象 自学二
- 6.9引蜘蛛。十九
- 内存不足,程序无法分配必须的内存,RPC服务器不可用
- 某公司面试概率题值排列组合基础回忆
- ORACLE数据库查看执行计划的方法
- 利用convertView优化ListView性能
- 基于OpenGL的VS2010开发
- DB2 9.5 中多线程架构的工作原理
- Tab效果之Tabhost