|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。 类型唆使
人人都晓得,PHP是一种弱类型的言语。在利用变量前不需求界说,不需求声明变量的数据类型。这在编程中带来良多便当,但也带了一些隐患,出格当变量的类型变更时。在PHP5增添了类型唆使,可以在履行过程当中主动对类办法的参数类型停止判别。这相似于Java2中的RTTI,共同reflection可让咱们很好地掌握对象。
<?php
interface Foo {
function a(Foo $foo);
}
interface Bar {
function b(Bar $bar);
}
class FooBar implements Foo, Bar {
function a(Foo $foo) {
// ...
}
function b(Bar $bar) {
// ...
}
}
$a = new FooBar;
$b = new FooBar;
$a->a($b);
$a->b($b);
?>
在强类型言语中,一切变量的类型将在编译时停止反省,而在PHP中利用类型唆使来对类型的反省则产生在运转时。假如类办法参数的类型不合错误,将会报出相似“Fatal error: Argument 1 must implement interface Bar…”如许的毛病信息。
以下代码:
<?php
function foo(ClassName $object) {
// ...
}
?>
相当于:
<?php
function foo($object) {
if (!($object instanceof ClassName)) {
die("Argument 1 must be an instance of ClassName");
}
}
?>
final关头字
PHP5中新增添了final关头字,它可以加在类或类办法前。标识为final的类办法,在子类中不克不及被覆写。标识为final的类,不克不及被承继,并且个中的办法都默许为final类型。
Final办法:
<?php
class Foo {
final function bar() {
// ...
}
}
?>
Final类:
<?php
final class Foo {
// class definition
}
// 上面这一行是毛病的
// class Bork extends Foo {}
?>
对象复制
后面在内存办理部分说过,PHP5中默许经由过程援用传递对象。像利用$object2=$object1如许的办法复制出的对象是互相联系关系的。假如咱们的确需求复制出一个值与本来不异的对象而但愿方针对象与源对象没有联系关系(像通俗变量那样经由过程值来传递),那末就需求利用clone关头字。假如还但愿在复制的同时变化源对象中的某些部分,可以在类中定一个__clone()函数,到场操作。
<?php
//对象复制
class MyCloneable {
static $id = 0;
function MyCloneable() {
$this->id = self::$id++;
}
/*
function __clone() {
$this->address = "New York";
$this->id = self::$id++;
}
*/
}
$obj = new MyCloneable();
$obj->name = "Hello";
$obj->address = "Tel-Aviv";
print $obj->id . "\n";
$obj_cloned = clone $obj;
print $obj_cloned->id . "\n";
print $obj_cloned->name . "\n";
print $obj_cloned->address . "\n";
?>
以上代码复制出一个完整不异的对象。
然后请把function __clone()这一个函数的正文去失落,从头运转法式。则会复制出一个根基不异,但部分属性变化的对象。
类常量
PHP5中可使用const关头字来界说类常量。
<?php
class Foo {
const constant = "constant";
}
echo "Foo::constant = " . Foo::constant . "\n";
?>
__METHOD__常量
__METHOD__ 是PHP5中新增的“魔术”常量,暗示类办法的称号。
魔术常量是一种PHP预界说常量,它的值可所以变更的,PHP中的其它已存在的魔术常量有__LINE__、__FILE__、__FUNCTION__、__CLASS__等。
<?php
class Foo {
function show() {
echo __METHOD__;
}
}
class Bar extends Foo {}
Foo::show(); // outputs Foo::show
Bar::show(); // outputs Foo::show either since __METHOD__ is
// compile-time evaluated token
function test() {
echo __METHOD__;
}
test(); // outputs test
?>接触MYSQL,开始设计数据库程序 |
|