PHP4中,不使用__construct()作為構(gòu)造函數(shù)的名字,必須使用類(lèi)的名字定義一個(gè)方法,就像在C++中一樣。 PHP5中,使用新的統(tǒng)一的 " /> 九九综合九九综合,手机在线成人免费视频,国产精久

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

PHP5權(quán)威編程閱讀學(xué)習(xí)筆記 附電子書(shū)下載

php 5 權(quán)威編程(php 5 Power Programming) PDF下載地址 http://www.jb51.NET/books/28207.html 

php4中,不使用__construct()作為構(gòu)造函數(shù)的名字,必須使用類(lèi)的名字定義一個(gè)方法,就像在C++中一樣。
php5中,使用新的統(tǒng)一的構(gòu)造函數(shù)命名方式:__construct(),當(dāng)然,使用類(lèi)名同樣也是可以的。
但是,你如果兩個(gè)同時(shí)使用的話(huà),系統(tǒng)默認(rèn)會(huì)使用__construct()的形式。
復(fù)制代碼 代碼如下:
<?php
class Person{
//php4中的方法
public function Person(){
echo "php4中的方法";
}
//php5推薦使用的方法
public function __construct(){
echo "php5推薦使用的方法";
}
public function say(){
}
}
$p1=new Person();
?>

在構(gòu)造函數(shù)中不能返回值,所以從構(gòu)造函數(shù)內(nèi)產(chǎn)生一個(gè)錯(cuò)誤最常用的做法就是拋出一個(gè)異常。
代碼如下:
復(fù)制代碼 代碼如下:
<?php
class Person{
private $_age;
public function __construct($age){
try {
if ($age<120){
$this->_age=$age;
}else {
throw new Exception("您輸入的年齡過(guò)大");
}
}catch (Exception $e){
echo $e->getMessage();
}
}
}
$p1=new Person(121);
?>

訪(fǎng)問(wèn)控制
對(duì)象屬性的訪(fǎng)問(wèn)保護(hù)是OOP的一個(gè)關(guān)鍵范例
Public:可以在任何地方被訪(fǎng)問(wèn)
Protected:類(lèi)成員可以被其所在類(lèi)的子類(lèi)和父類(lèi)從對(duì)象內(nèi)部的方法訪(fǎng)問(wèn)
Private:類(lèi)成員只能被其所在類(lèi)從對(duì)象內(nèi)部的方法訪(fǎng)問(wèn),而無(wú)法從繼承類(lèi)的成員中訪(fǎng)問(wèn)到。因?yàn)樗接贸蓡T不會(huì)被繼承,所以?xún)蓚€(gè)相關(guān)的類(lèi)完全可以分別聲明一個(gè)名字相同的私有變量。
也就是兩個(gè)類(lèi)都只能看到自己的私有屬性,私有成員之間是沒(méi)有關(guān)系的。
例子:
復(fù)制代碼 代碼如下:
<?php
/**
* Define MyClass
*/
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // 這行能被正常執(zhí)行
echo $obj->protected; // 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤
echo $obj->private; // 這行也會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤
$obj->printHello(); // 輸出 Public、Protected 和 Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// 可以對(duì) public 和 protected 進(jìn)行重定義,但 private 而不能
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // 這行能被正常執(zhí)行
echo $obj2->private; // 未定義 private
echo $obj2->protected; // 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤
$obj2->printHello(); // 輸出 Public、Protected2,但不會(huì)輸出 Private

注意:類(lèi)中的方法都必須使用關(guān)鍵字public、protected 或 private 進(jìn)行定義。如果沒(méi)有設(shè)置這些關(guān)鍵字,則該方法會(huì)被設(shè)置成默認(rèn)的 public。
靜態(tài)方法
靜態(tài)方法可以不創(chuàng)建對(duì)象實(shí)例就通過(guò) 類(lèi)名::靜態(tài)方法 來(lái)調(diào)用,也可以在一個(gè)對(duì)象實(shí)例中通過(guò)$this->靜態(tài)方法或self::靜態(tài)方法來(lái)調(diào)用。
復(fù)制代碼 代碼如下:
<?php
class Foo
{
public static $my_static = 'foo';
public static function staticValue() {
return self::$my_static;//在類(lèi)中訪(fǎng)問(wèn)靜態(tài)成員使用self關(guān)鍵字
}
}
$obj=new Foo();
echo $obj->staticValue();//方式一
echo Foo::staticValue();//方式二
?>

克隆對(duì)象
php4中,new一個(gè)對(duì)象的時(shí)候,返回的是“對(duì)象本身”
php5中,new一個(gè)對(duì)象的時(shí)候,返回的是“指向?qū)ο蟮木浔?
這意味著在php5中,將對(duì)象實(shí)例($obj1)賦值給另一個(gè)變量($obj2)的時(shí)候,兩個(gè)對(duì)象都是指向同一塊內(nèi)存區(qū)域。
比如 :
復(fù)制代碼 代碼如下:
<?php
class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= $obj1;
$obj2->str="obj2";
echo $obj1->str;//將輸出“obj1”
?>

由于$obj1和$obj2指向的是同一塊內(nèi)存區(qū)域,因此使用任何一個(gè)對(duì)象修改其中的成員變量的值的時(shí)候,都會(huì)影響到另一個(gè)對(duì)象。
但是在有些時(shí)候,我們確實(shí)需要復(fù)制一個(gè)對(duì)象的拷貝(兩塊相互獨(dú)立的內(nèi)存區(qū)域),這時(shí)候可以使用語(yǔ)言命令clone
參考下面的例子;
復(fù)制代碼 代碼如下:
<?php
class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= clone $obj1;
$obj2->str="obj2";
echo $obj1->str;//將輸出“obj2”
?>

parent::和self::
self::指向當(dāng)前類(lèi),而且通常用來(lái)訪(fǎng)問(wèn)靜態(tài)成員,方法和常量
parent::指向父類(lèi),而且它經(jīng)常被用來(lái)調(diào)用父類(lèi)的構(gòu)造函數(shù)和方法,也可以用來(lái)訪(fǎng)問(wèn)父類(lèi)的成員和常量
注意:你應(yīng)該使用parent::而不是父類(lèi)的某個(gè)具體的名字,因?yàn)檫@樣可以令你方便的更改你的類(lèi)的層次。
例子:
復(fù)制代碼 代碼如下:
<?php
class Father{
public function __construct(){
echo "調(diào)用父類(lèi)的構(gòu)造函數(shù)<br>";
}
}
class Son extends Father {
public function __construct(){
parent::__construct();//方式一
// Father::__construct();//方式二
echo "調(diào)用子類(lèi)的構(gòu)造函數(shù)";
}
}
$son=new Son();
?>

結(jié)果:
調(diào)用父類(lèi)的構(gòu)造函數(shù)
調(diào)用子類(lèi)的構(gòu)造函數(shù)
推薦使用方式一,原因上面已經(jīng)說(shuō)了。
instanceof實(shí)例
復(fù)制代碼 代碼如下:
<?php
class Rectangle {
public $name=__CLASS__;
}
class Square extends Rectangle {
public $name=__CLASS__;
}
class Circle{
public $name=__CLASS__;
}
function checkIfRectangle($shape){
if ($shape instanceof Rectangle ){
echo $shape->name;
}else {
echo "該對(duì)象不是Rectangle類(lèi)的實(shí)例";
}
}
checkIfRectangle(new Square());//輸出:Square
checkIfRectangle(new Circle());//輸出:該對(duì)象不是Rectangle類(lèi)的實(shí)例
?>

注:__CLASS__是一個(gè)特殊的常量,用來(lái)存儲(chǔ)當(dāng)前類(lèi)的名字

php技術(shù)PHP5權(quán)威編程閱讀學(xué)習(xí)筆記 附電子書(shū)下載,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品久久久久久福利一牛影视 | 午夜一区二区三区视频 | av手机在线免费观看 | 一区二区三区欧美在线 | 亚洲欧洲日韩精品 中文字幕 | 久久日本 | 色性av| 成人免费在线视频 | 岛国一区| 亚洲激情综合 | 91亚洲国产亚洲国产 | 欧美日韩黄| 欧美综合久久 | 国产激情一区二区三区 | 亚洲综合日韩精品欧美综合区 | 日本在线播放 | 国产免费一区二区 | 国产成人一区二区三区精 | 欧美日韩一区在线播放 | 欧美视频在线看 | 久久久久久久久久影视 | 欧美色999| 亚洲成人精品 | 欧美第一区| 国产精品一区二区三区在线播放 | 美国黄色一级片 | 99re国产视频 | 亚洲色欧美另类 | 国产精品久久久久久久久久久免费看 | 欧美最猛黑人xxxx黑人 | 亚洲免费久久久 | 在线一区视频 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 欧美综合久久 | 国产黄色av网站 | 狠狠干美女| 一级a性色生活片久久毛片波多野 | 日韩在线观看 | 久久在线 | 91免费观看视频 | 亚洲欧美激情精品一区二区 |