首頁  >  文章  >  後端開發  >  詳細講解php 類別、方法關鍵字教程

詳細講解php 類別、方法關鍵字教程

亚连
亚连原創
2018-05-17 13:49:562230瀏覽

以下是我要幫大家整理的php 類別、方法關鍵字教學,有興趣的同學可以去看看。

1、final
如果我們不希望一個類別被繼承,我們使用final來修飾這個類別。這個類別將無法被繼承。
final---用於類別、方法前。 
final類別---不可被繼承。 
final方法---不可被覆寫。
2、public 表示全域,類別內部外部子類別都可以存取;private表示私有的,只有本類別內部可以使用;protected表示受保護的,只有本類或子類別或父類別中可以存取;
3、this是指向目前物件的指標(可以看成C裡面的指標),self是指向目前類別的指針,parent是指向父類別的指針
self:當變量,方法設定為static時,在本類別中呼叫用self
4、static
宣告類別成員或方法為static ,就可以不實例化類別而直接訪問,不能透過一個物件來存取其中的靜態成員(靜態方法除外)。靜態成員屬於類,不屬於任何物件實例,但類別的物件實例都能共用。
然後我們再看一下使用$object->… 和使用class::… 都有什麼差別: 
1. 使用$object->… ,需要執行建構子#建立物件; 
2. 使用class::… 呼叫靜態方法/變量,不需要執行建構子建立物件; 
3. 使用class::… 呼叫非靜態方法/變量,也不需要執行建構函式建立物件。
5、abstract 抽象
一、抽象類別abstract class
1 .抽象類別是指在 class 前面加了 abstract 關鍵字且有抽象方法(在類別方法 function 關鍵字前面加了 abstract 關鍵字)的類別。
2 .抽象類別不能被直接實例化。抽象類別中只定義(或部分實作)子類別所需的方法。子類別可以透過繼承抽象類別並透過實作抽象類別中的所有抽象方法,使抽象類別具體化。
3 .如果子類別需要實例化,前提是它實作了抽象類別中的所有抽象方法。如果子類別沒有全部實作抽象類別中的所有抽象方法,那麼該子類別也是抽象類別,必須在 class 前面加上 abstract 關鍵字,並且不能被實例化。
6、interface 介面
1 .抽象類別提供了具體實現的標準,而介面則是純粹的模版。介面只定義功能,而不包含實作的內容。介面用關鍵字 interface 來聲明。
2 . interface 是完全抽象的,只能宣告方法,而且只能宣告 public 的方法,不能宣告 private 及 protected 的方法,不能定義方法體,也不能宣告實例變數 。然而, interface 卻可以宣告常數變數 。但將常數變數放在 interface 中違背了其作為介面的作用而存在的宗旨,也混淆了 interface 與類別的不同價值。如果的確需要,可以放在對應的 abstract class 或 Class 中。
7、instanceof
PHP5的另一個新成員是instdnceof關鍵字。使用這個關鍵字可以確定一個物件是類別的實例、類別的子類,還是實作了某個特定接口,並進行對應的操作。在某些情況下,我們希望確定某個類別是否特定的類型,或者是否實作了特定的介面。 instanceof操作符非常適合完成這個任務。 instanceof操作符檢查三件事:實例是否某個特定的類型,實例是否從某個特定的類型繼承,實例或他的任何祖先類別是否實作了特定的介面。例如,假設希望了解名為manager的物件是否為類別Employee的實例:

$manager = new Employee();
if ($manager instanceof Employee)
  echo "Yes";
有两点值得注意。首先,类名没有任何定界符(引号)。使用定界符将导致
语法错误
。其次,如果比较失败,脚本将退出执行。instanceof关键字在同时处理多个对象时特别有用。例如,你可能要重复地调用某个函数,但希望根据对象类型调整函数的行为。可以使用case语句和instanceof关键字来实现这个目标。
class test{}
class test{}
class testChilern 
Extends
 test{}
$a = new test();
$m = new test();
$i = ($m instanceof test);
if($i)
  echo &#39;$m是类test的实例!<br />&#39;; // get this value
switch ($a instanceof test){
  case true :
    echo &#39;YES<br />&#39;;
    break;
  case false :
    echo &#39;No<br />&#39;; //get this value
    break;
}
$d=new testChilern();
if($d instanceof test)echo &#39;$d是类test的子类!<br />&#39;; // get this value

php中instanceof有什麼作用
作用:(1)判斷物件是否是某個類別的實例,(2)判斷一個物件是否實作了某個介面。
第一種用法:

<?php
$obj = new A();
if ($obj instanceof A) {
  echo &#39;A&#39;;
}

第二種用法:

<?php
interface ExampleInterface
{
   public function interfaceMethod();
 }
 class ExampleClass implements ExampleInterface
{
   public function interfaceMethod()
   {
     return &#39;Hello World!&#39;;
   }
 }
$exampleInstance = new ExampleClass();
 if($exampleInstance instanceof ExampleInterface){
   echo &#39;Yes, it is&#39;;
 }else{
   echo &#39;No, it is not&#39;;
} 
?>

輸出結果:Yes, it is
另外,要注意instanceof 與is_subclass_of () 的差別,請看程式碼:

<?php
class Foo {
   public $foobar = &#39;Foo&#39;;
   public function test() {
     echo $this->foobar . "\n";
   }
 }
 class Bar extends Foo {
   public $foobar = &#39;Bar&#39;;
 }
$a = new Foo();
$b = new Bar();
echo "use of test() method\n";
$a->test();
$b->test();
echo "instanceof Foo\n";
var_dump($a instanceof Foo); // TRUE
var_dump($b instanceof Foo); // TRUE
echo "instanceof Bar\n";
var_dump($a instanceof Bar); // FALSE
var_dump($b instanceof Bar); // TRUE
echo "subclass of Foo\n";
var_dump(is_subclass_of($a, &#39;Foo&#39;)); // FALSE
var_dump(is_subclass_of($b, &#39;Foo&#39;)); // TRUE
echo "subclass of Bar\n";
var_dump(is_subclass_of($a, &#39;Bar&#39;)); // FALSE
var_dump(is_subclass_of($b, &#39;Bar&#39;)); // FALSE
?>
 输出结果(PHP 5.4.4):
 use of test() method
 Foo
 Bar
 instanceof Foo
 bool(true)
 bool(true)
 instanceof Bar
 bool(false)
 bool(true)
 subclass of Foo
 bool(false)
 bool(true)
 subclass of Bar
 bool(false)

上面是我整理給大家的講解php 類別、方法關鍵字教學,希望今後會對大家有幫助。

相關文章:

 namespace及use具體的使用方法

PHP閉包function() use()中的詳細使用方法

PHP命名空間namespace 及匯入use 的詳細用法指南


以上是詳細講解php 類別、方法關鍵字教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn