php4class的簡單介紹

本文目錄一覽:

為什麼php里的class要加var啊

可以下載php手冊,有解釋,不推薦使用,建議使用public,protected,private關鍵字。

以下為php手冊介紹:

為了向後兼容 PHP 4,PHP 5 聲明屬性依然可以直接使用關鍵字 var 來替代(或者附加於)public,protected 或 private。但是已不再需要 var 了。在 PHP 5.0 到 5.1.3,var 會被認為是廢棄的,而且拋出 E_STRICT 警告,但是 5.1.3 之後就不再認為是廢棄,也不會拋出警告。

如果直接使用 var 聲明屬性,而沒有用 public,protected 或 private 之一,PHP 5 會將其視為 public。

PHP怎麼獲取很多Class文件裡面所有Class的方法?

實例化這個class,然後就可以調用class裡面的所有方法了。

實例化的方法:

首先在需要調用的php文件裡面用include引入這個class文件。

include ‘你的class文件’;

然後進行實例化,比如class名為test。

$m = new test();

實例化後可以調用class裡面的任何方法,例如有個方法名為zhidao。

$m-zhidao();

這樣就成功的完成了。

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

?

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

請問高手們,__CLASS__ 在php中是代表什麼意思呢

類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)在 PHP 4 中該值總是小寫字母的。

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

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

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智慧,Python都扮演著重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進位下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27

發表回復

登錄後才能評論