|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
学习如何将PHP与HTML结合起来完成简单动态页面php5 笼统类
笼统类不克不及被实例化。
笼统类与其它类一样,答应界说变量及办法。
笼统类一样可以界说一个笼统的办法,笼统类的办法不会被履行,不外将有能够会在其派生类中履行。
例六:笼统类
<?php
abstract class foo {
protected $x;
abstract function display();
function setX($x) {
$this->x = $x;
}
}
class foo2 extends foo {
function display() {
// Code
}
}
?>
__call
PHP5 的对象新增了一个公用办法 __call(),这个办法用来监督一个对象中的其它办法。假如你试着挪用一个对象中不存在的办法,__call 办法将会被主动挪用。
例七:__call
<?php
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
}
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
这个特别的办法可以被用来完成“过载(overloading)”的举措,如许你就能够反省你的参数而且经由过程挪用一个公有的办法来传递参数。
例八:利用 __call 完成“过载”举措
<?php
class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
} private function foo_for_int($x) {
print("oh an int!");
} private function foo_for_string($x) {
print("oh a string!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>
__set 和 __get
这是一个很棒的办法,__set 和 __get 办法可以用来捕捉一个对象中不存在的变量和办法。
例九: __set 和 __get
<?php
class foo {
function __set($name,$val) {
print("Hello, you tried to put $val in $name");
}
function __get($name) {
print("Hey you asked for $name");
}
}
$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>
类型唆使
在 PHP5 中,你可以在对象的办法中指明其参数必需为另外一个对象的实例。
例十:类型唆使
<?php
class foo {
// code ...
}
class bar {
public function process_a_foo(foo $foo) {
// Some code
}
}
$b = new bar();
$f = new foo();
$b->process_a_foo($f);
?>
可以看出,咱们可以显性的在参数前指明一个对象的称号,PHP5 会辨认出这个参数将会如果一个对象实例。
静态成员
静态成员和静态办法在面象对象编程的术语中被称作 “对象办法(class methods)” 和 “对象变量(class variables)”。
“对象办法” 在一个对象没有实例化前答应被挪用。一样,“对象变量” 在一个对象没有实例化前可以被自力操作掌握(不需求用一个对象的办法来掌握)。
例十一:对象办法和对象变量
<?php
class calculator {
static public $pi = 3.14151692;
static public function add($x,$y) {
return $x + $y;
}
}
$s = calculator::$pi;
$result = calculator::add(3,7);
print("$result");
?>
异常处置
异常处置是公认的处置法式毛病的幻想办法,在 Java 及 C++ 中都有这个概念,咱们欣喜的看到,在 PHP5 已到场了这方面的使用。你可以测验考试利用 “try” 和 “catch” 来掌握法式的毛病。
例十二:异常处置
<?php
class foo {
function divide($x,$y) {
if($y==0) throw new Exception("cannot divide by zero");
return $x/$y;
}
}
$x = new foo();
try {
$x->divide(3,0);
} catch (Exception $e) {
echo $e->getMessage();
echo "n<br />n";
// Some catastrophic measure here
}
?>
上例中,咱们利用了 “try” 来履行花括号中的语句,当有毛病产生的时分,代码会把毛病交给 “catch” 子句来处置,在 “catch” 子句中,你需求指明要把毛病交给某个对象处置,如许做可使代码布局看起来更明晰,由于如今咱们可以把一切的毛病信息交给一个对象来处置。
自界说毛病处置
你可以很便利的用自界说的处置毛病的代码来掌握你的法式中的不测。你仅仅需求从异常类中派生出一个本人的毛病掌握类,在你本人的毛病掌握类中,你需求有一个机关函数和一个 getMessage 办法,以下是一个例子。
例十三:自界说毛病处置
<?php
class WeirdProblem extends Exception {
private $data;
function WeirdProblem($data) {
parent::exception();
$this->data = $data;
}
function getMessage() {
return $this->data . " caused a weird exception!";
}
}
?>
如今咱们可使用 “throw new WeirdProblem($foo)” 来抛出一个毛病句柄,假如毛病在 “try” 的代码块中产生,PHP5 会主动把毛病交给 “catch” 局部来处置。
称号空间
称号空间对类的分组或函数分组很有效。它可以把一些相干的类或函数给组合到一同,便利今后挪用。
例十四:称号空间
<?php
namespace Math {
class Complex {
//...code...
function __construct() {
print("hey");
}
}
} $m = new Math::Complex();
?>
注重你需求在何种情形下利用称号空间,在实践应用中,你能够会需求声明两个或多个称号一样的对象来做分歧的工作,那末你就能够把他们分离放到分歧的称号空间中去(但接口是要不异的)。
只要实现最基本的功能就可以了 就是可以添加留言 然后可以显示留言,然后加入管理功能 |
|