搜尋
首頁php教程php手册PHP5權威程式設計閱讀學習筆記 附電子書下載_php基礎

PHP 5 權威程式設計(PHP 5 Power Programming) PDF下載位址/books/28207.html 

PHP4中,不使用__construct()作為建構子的名字,必須使用類別的名字定義一個方法,就像在C 中一樣。
PHP5中,使用新的統一的建構子命名方式:__construct(),當然,使用類別名稱同樣也是可以的。
但是,你如果兩個同時使用的話,系統預設會使用__construct()的形式。

複製程式碼 程式碼如下:

class Person{
//PHP4中的方法
public function Person(){
echo "PHP4中的方法";
}
//PHP5建議使用的方法
public function __construct(){
echo "PHP5建議使用的方法";
}
public function say(){
}
}
$p1=new Person();
?>

在建構函式中不能回傳值,所以從建構函式內產生一個錯誤最常用的做法就是拋出一個例外。
程式碼如下:
複製程式碼 程式碼如下:

class Person{
private $_age;
public function __construct($age){
try {
if ($age$this->_age=$age;
}else {
throw new Exception("您輸入的年齡過大");
}
}catch (Exception $e){
echo $e->getMessage();
}
}
}
$p1=new Person(121);
?>

存取控制
物件屬性的存取保護是OOP的關鍵範例
Public:可以在任何地方被存取
Protected:類別成員可以被其所在類別的子類別和父類別從物件內部的方法存取
Private:類別成員只能被其所在類別從物件內部的方法訪問,而無法從繼承類別的成員中存取。因為私人成員不會被繼承,所以兩個相關的類別完全可以分別宣告一個名字相同的私有變數。
也就是兩個類別都只能看到自己的私有屬性,私有成員之間是沒有關係的。
範例:
複製程式碼 程式碼如下:

/**
* 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; //這行能被正常執行
echo $obj->protected; // 這行會產生一個致命錯誤
echo $obj->private; // 這行也會產生一個致命錯誤
$obj ->printHello(); // 輸出Public、Protected 和Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// 可以對public和protected 進行重定義,但private 而不能
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this-> protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // 這行能正常執行echo $obj2->private; // 未定義private
echo $obj2->protected; // 這行會產生一個致命錯誤
$obj2->printHello(); // 輸出Public、Protected2 ,但不會輸出Private

注意:類別中的方法都必須使用關鍵字public、protected 或private 進行定義。如果沒有設定這些關鍵字,則該方法會被設定成預設的 public。
靜態方法
靜態方法可以不建立物件實例就透過類別名稱::靜態方法來調用,也可以在一個物件實例中透過$this->靜態方法或self: :靜態方法來呼叫。
複製程式碼 程式碼如下:

class Foo
{
public static $my_static = 'foo';
public static function staticValue() {
return self::$my_static;//在類別中存取靜態成員使用self關鍵字
} }
$obj=new Foo();
echo $obj->staticValue();//方式一
echo Foo::staticValue();//方式二
?>

克隆物件
在PHP4中,new一個物件的時候,回傳的是「物件本身」
在PHP5中,new一個物件的時候,回傳的是「指向物件的句柄」
這意味著在PHP5中,將物件實例($obj1)賦值給另一個變數($obj2)的時候,兩個物件都是指向同一塊記憶體區域。
例如:
複製程式碼 程式碼如下:

class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= $obj1;
$obj2->str="obj2";
echo $obj1->str;//將輸出「obj1」
?>

由於$obj1和$obj2指向的是同一塊記憶體區域,因此使用任何一個物件修改其中的成員變數的值的時候,都會影響到另一個物件。
但是在有些時候,我們確實需要複製一個物件的拷貝(兩塊相互獨立的記憶體區域),這時候可以使用語言命令clone
參考下面的例子;
複製程式碼 程式碼如下:

class test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= clone $obj1;
$obj2->str="obj2";
echo $obj1->str;//將輸出「obj2」
?>

parent::和self::
self::指向目前類,而且通常用來存取靜態成員,方法和常數
parent::指向父類,而且它經常被用來呼叫父類的建構子和方法,也可以用來存取父類的成員和常數
注意:你應該使用parent::而不是父類的某個具體的名字,因為這樣可以令你方便的更改你的類別的層次。
範例:
複製程式碼 程式碼如下:

class Father{
public function __construct(){
echo "呼叫父類別的建構子
";
}
}
class Son extends Father {
public function __construct (){
parent::__construct();//方式一
// Father::__construct();//方式二
echo "呼叫子類別的建構子";
}
}
$son=new Son();
?>

結果:
呼叫父類別的建構子
呼叫子類別的建構子
推薦使用方式一,原因上面已經說了。
instanceof實例
複製程式碼 程式碼如下:

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 "該物件不是Rectangle類別的實例";
}
}
checkIfRectangle(new Square());//輸出:Square
checkIfRectangle(new Circle());/ /輸出:該物件不是Rectangle類別的實例
?>

註:__CLASS__是一個特殊的常數,用來儲存目前類別的名字
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
php5和php8有什么区别php5和php8有什么区别Sep 25, 2023 pm 01:34 PM

php5和php8的区别在性能、语言结构、类型系统、错误处理、异步编程、标准库函数和安全性等方面。详细介绍:1、性能提升,PHP8相对于PHP5来说在性能方面有了巨大的提升,PHP8引入了JIT编译器,可以对一些高频执行的代码进行编译和优化,从而提高运行速度;2、语言结构改进,PHP8引入了一些新的语言结构和功能,PHP8支持命名参数,允许开发者通过参数名而不是参数顺序等等。

php5如何改80端口php5如何改80端口Jul 24, 2023 pm 04:57 PM

php5改80端口的方法:1、编辑Apache服务器的配置文件中的端口号;2、辑PHP的配置文件以确保PHP在新端口上工作;3、重启Apache服务器,PHP应用程序将开始在新的端口上运行。

php5没有监听9000端口如何解决php5没有监听9000端口如何解决Jul 10, 2023 pm 04:01 PM

php5没有监听9000端口解决方法步骤:1、检查PHP-FPM配置文件;2、重启PHP-FPM服务;3、关闭防火墙或配置端口转发;4、检查其他进程是否占用9000端口。

php7和php5语法有什么区别php7和php5语法有什么区别Jul 10, 2023 pm 03:25 PM

php7和php5语法区别有:1、PHP7引入了严格的类型声明,而PHP5变量的类型是隐式的;2、PHP7引入了对标量类型声明的支持,而PHP5并没有;3、PHP7引入了NULL合并运算符,而PHP5检查一个变量是否存在并且不为null,需要使用条件语句;4、PHP7添加了新的比较运算符“<=>”,而PHP5并没有;5、PHP7引入新特性匿名类,而PHP5并没有。

php7的版本和5有哪些不同php7的版本和5有哪些不同Sep 15, 2023 pm 04:11 PM

php7的版本和5的不同有性能提升、标量类型声明、返回值类型声明、异常处理改进、匿名类、语法改进、新的运算符、增强的错误处理和移除了一些旧特性等。详细介绍:1、性能提升,PHP7引入了全新的Zend引擎,名为Zend Engine 3.0,带来了显著的性能提升,PHP7的性能比PHP5提高了大约两倍,这主要是通过改进了内存管理、优化了函数调用和异常处理、增强了垃圾回收等等。

php5没有监听9000端口怎么解决php5没有监听9000端口怎么解决Mar 21, 2023 pm 04:32 PM

在使用PHP5时,有些用户可能会遇到无法监听端口9000的情况。这时,我们需要进行一些配置和排查工作来解决这一问题。

php5怎么改80端口php5怎么改80端口Mar 21, 2023 pm 04:32 PM

​如果你是一名网站管理员,你可能会碰到需要将 PHP5 的端口从默认的 80 端口进行修改的情况。这个过程可能会稍有进急,但是只要跟着以下步骤操作,一定会很容易地完成。

探讨PHP7和PHP5在语法上的不同之处探讨PHP7和PHP5在语法上的不同之处Mar 21, 2023 pm 07:10 PM

PHP是一种广泛使用的服务器端编程语言,被用于开发动态网站和应用程序。近些年,PHP7的发布引起了一些关注。PHP7比之前的版本(如PHP5)有很多改进和优化。在本文中,我们将探讨PHP7和PHP5在语法上的不同之处。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能