3.1 继承
<?php /* 类似与java final修饰后不能继承/重写 * */ class A { public $text = "测试父类继承"; function __construct() { echo "创建了一个A\n"; } function fn() { echo "这是父亲的方法\n"; } } class B extends A { /* 在java中 构造方法不会被重写,不会被继承 * 在构造方法中调用父类构造方法,用super(),且只能调用一次且放在首行。 * * 在js中 子类不能写构造方法。但是能被继承 * * 在php中 构造方法会被重写,会被继承。 * 在构造方法中调用父类构造方法,用parent::(无次数,位置限制) * */ function __construct() { parent::__construct(); parent::__construct(); echo "创建了一个B\n"; } function fn() { /* java调用父类的方法是 super.fn(); * js super.fn(); * php 见下 parent::fn(); * */ parent::fn(); echo "这是重写A的方法"; } } $b = new B(); $b->fn(); //print_r($b);3.2 抽象
// 类似于java abstract class AbstractClass{ // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n";3.3 接口
<?php // 声明一个'iTemplate'接口,类似于java interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // 实现接口 // 下面的写法是正确的 class Template implements iTemplate { public $lists = array(); public function setVariable($name, $var) { $this->lists[$name] = $var; } public function getHtml($template) { echo "{$template}"; } } $template = new Template(); $template->getHtml('测试'); $template->setVariable('张三', '250'); echo $template->lists['张三'];3.4 延迟静态绑定
延迟到方法执行时,才绑定。 <?php class A{ const XX ="这是A的常量\n"; public function fn(){ /* 使用self:: 会绑定A中的常量XX * 使用static:: 延迟静态绑定为B的常量XX * (B中有常量XX,若无为A中的常量) * */ echo static::XX; } } class B extends A{ const XX ="这是B的常量\n"; } $b = new B(); $b->fn(); 5.5 流程处理函数 die/exit 退出 include eg: include 'URL'; include_once ps:用法和includ一样,主要用于区别函数的两次导入会报错 require,require_once ps:用法和include一样,但是include出错是警告,require会终止程序执行。 return 返回值; ps:在函数中使用global $i和return $i一样 /* 老版本的php加载其他php方式 * 要求 文件名和类名必须一致 * 新版本 spl_autoload_register(); * */ function __autoload($cn){ return "$cn.php"; } spl_autoload_register();