php5.25.3區別,PHP55

本文目錄一覽:

php7與php5的區別

php5與php7之間的區別:

1、性能提升:PHP7比PHP5.0性能提升了兩倍。

2、以前的許多致命錯誤,現在改成拋出異常。

3、PHP 7.0比PHP5.0移除了一些老的不在支持的SAPI(服務器端應用編程端口)和擴展。

4、PHP 7.0比PHP5.0新增了空接合操作符。

5、PHP 7.0比PHP5.0新增加了結合比較運算符。

6、PHP 7.0比PHP5.0新增加了函數的返回類型聲明。

7、PHP 7.0比PHP5.0新增加了標量類型聲明。

8、PHP 7.0比PHP5.0新增加匿名類。

9、錯誤處理和64位支持

PHP這麼多版本區別是什麼?哪個最好最穩定?哪個使用的人數最多

edius 5.5 是最穩定的一個版本, 雖然出來了 6.2和6.3測試版了,但好多單位都在用5.5 。 千萬別用6.1

php4與php5區別具體有哪些?

新的對象模式

PHP5 中的對象已經進行了較系統、較全面的調整,現在的樣子可能看起來會有些類似於 Java。本小節着重講述 PHP5 中新的對象模式,並舉了一些較簡易的例子來說明。就讓本節成為你的 PHP5 之旅的一個新起點吧。:)

* 構造函數和析構函數

* 對象的引用

* 對象的克隆

* 對象中的私有、公共及受保護模式

* 接口 (Interfaces)

* 抽象類

* __call

* __set 和 __get

* 靜態成員

構造函數和析構函數

在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。

在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。

例一:構造函數和析構函數

?php

class foo {

var $x;

function __construct($x) {

$this-x = $x;

}

function display() {

print($this-x);

}

function __destruct() {

print(“bye bye”);

}

}

$o1 = new foo(4);

$o1-display();

?

在上面的例子中,當你終止調用 foo 類的時候,其析構函數將會被調用,上例中會輸出 “bye bye”。

對象的引用

眾所周知,在PHP4 中,傳遞變量給一個函數或方法,實際是把這個變量做了一次複製,也就意味着你傳給函數或方法的是這個變量的一個副本,除非你使用了引用符號 “” 來聲明是要做一個引用,而不是一個 Copy。在 PHP5 中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。

例二:對象的引用

?php

class foo {

var $x;

function setX($x) {

$this-x = $x;

}

function getX() {

return $this-x;

}

}

$o1 = new foo;

$o1-setX(4);

$o2 = $o1;

$o1-setX(5);

if($o1-getX() == $o2-getX()) print(“Oh my god!”);

?

對象的克隆

如上所述,當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。

例三:對象的克隆

?php

class foo {

var $x;

function setX($x) {

$this-x = $x;

}

function getX() {

return $this-x;

}

}

$o1 = new foo;

$o1-setX(4);

$o2 = $o1-__clone();

$o1-setX(5); if($o1-getX() != $o2-getX()) print(”Copies are independant”);

?

對象克隆的方法在其它很多應用程序語言中都是存在的,所以你不必擔心它的穩定性。:)

對象中的私有、公共及保護模式

PHP4 中,一個對象的所有方法和變量都是公共的,這意味着你可以在一個對象的外部操作其中的任意一個變量和方法。PHP5 引入了三種新的用來控制這種存取權限的模式,它們是:公共的(Public)、受保護的(Protected)及私有的(Private)。

公共模式(Public):允許在對象外部進行操作控制。

私有模式(Private):只允許本對象內的方法對其進行操作控制。

受保護模式(Protected):允許本對象及其父對象對其進行操作控制。

例四: 對象中的私有、公共及受保護模式

?php

class foo {

private $x;

public function public_foo() {

print(“I’m public”);

}

protected function protected_foo() {

$this-private_foo(); //Ok because we are in the same class we can call private methods

print(”I’m protected”);

}

private function private_foo() {

$this-x = 3;

print(”I’m private”);

}

}

class foo2 extends foo {

public function display() {

$this-protected_foo();

$this-public_foo();

// $this-private_foo(); // Invalid! the function is private in the base class

}

} $x = new foo();

$x-public_foo();

//$x-protected_foo(); //Invalid cannot call protected methods outside the class and derived classes

//$x-private_foo(); //Invalid private methods can only be used inside the class $x2 = new foo2();

$x2-display();

?

提示:對象中的變量總是以私有形式存在的,直接操作一個對象中的變量不是一個好的面向對象編程的習慣,更好的辦法是把你想要的變量交給一個對象的方法去處理。

接口 (Interfaces)

眾所周知,PHP4 中的對象支持繼承,要使一個對象成為另一個對象的派生類,你需要使用類似 “class foo extends parent” 的代碼來控制。 PHP4 和 PHP5 中,一個對象都僅能繼承一次,多重繼承是不被支持的。不過,在 PHP5 中產生了一個新的名詞:接口,接口是一個沒有具體處理代碼的特殊對象,它僅僅定義了一些方法的名稱及參數,此後的對象就可以方便的使用 ‘implement’ 關鍵字把需要的接口整合起來,然後再加入具體的執行代碼。

例五:接口

?php

interface displayable {

function display();

}

interface printable {

function doprint();

}

class foo implements displayable,printable {

function display() {

// code

} function doprint() {

// code

}

}

?

這對提高代碼的可讀性及通俗性有很大的幫助,通過上面的例子可以看到,對象 foo 包含了 displayable 和 printable 兩個接口,這時我們就可以清楚的知道,對象 foo 一定會有一個 display() 方法和一個 print() 方法,只需要去了解接口部分,你就可以輕易的操作該對象而不必去關心對象的內部是如何運作的。

抽象類

抽象類不能被實例化。

抽象類與其它類一樣,允許定義變量及方法。

抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。

例六:抽象類

?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

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();

?

注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那麼你就可以把他們分別放到不同的名稱空間中去(但接口是要相同的)。

php5各版本的區別?

PHP版本號5.3.4, 設x.y.z

x版本號變化是結構改變

y版本號變動是功能增加

z版本號變動都是修正漏洞

5.0,zend2引擎,對象模型變化

5.1, 增加PDO數據庫操作類,

5.2 內置JSON,開啟濾鏡

5.3 增加名字空間、延遲動態綁定、goto無條件跳轉、改進win下效率,支持sqlite3等等

5.4 增加trait特徵組語法,增加內置網站服務器。廢除不少舊環境參數

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/287128.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 13:08
下一篇 2024-12-23 13:08

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • Sublime Test與Python的區別

    Sublime Text是一款流行的文本編輯器,而Python是一種廣泛使用的編程語言。雖然Sublime Text可以用於編寫Python代碼,但它們之間有很多不同之處。接下來從…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • TensorFlow和Python的區別

    TensorFlow和Python是現如今最受歡迎的機器學習平台和編程語言。雖然兩者都處於機器學習領域的主流陣營,但它們有很多區別。本文將從多個方面對TensorFlow和Pyth…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • 麥語言與Python的區別

    麥語言和Python都是非常受歡迎的編程語言。它們各自有自己的優缺點和適合的應用場景。本文將從語言特性、語法、生態系統等多個方面,對麥語言和Python進行詳細比較和闡述。 一、語…

    編程 2025-04-28
  • Python與C語言的區別和聯繫

    Python與C語言是兩種常用的編程語言,雖然兩者都可以用於編寫軟件程序,但是它們之間有很多不同之處。本文將從多個方面對Python與C語言的區別和聯繫進行詳細的闡述。 一、語法特…

    編程 2025-04-28
  • Python中深拷貝和淺拷貝的區別

    本文將從以下幾個方面對Python中深拷貝和淺拷貝的區別做詳細的闡述,包括:拷貝的含義、變量和對象的區別、淺拷貝的示例、深拷貝的示例、可變對象和不可變對象的區別、嵌套的數據結構以及…

    編程 2025-04-28

發表回復

登錄後才能評論