存取修飾符是一種為任何其他 PHP 識別碼的變數設定可存取範圍和權限的方法。 PHP 支援各種關鍵字來使任何變數存取任何變數和標識符。我們可以將這些關鍵字指派給類別、函數或識別碼。這些關鍵字 – public、private、protected、abstract、final 等
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
與 Java 不同,PHP 的存取修飾符有一些限制。我們不能在類別層級、函數層級和標識符層級上使用所有 PHP 存取修飾符。我們可以根據我們的業務需求使用這些存取修飾符來在整個程式或應用程式中授予權限或撤銷權限。
以下是列表修飾符以及是否適用:
Access Modifier | Class Level | Function Level | Variable Level |
public | NA | YES | YES |
private | NA | YES | YES |
protected | NA | YES | YES |
abstract | YES | YES | NA |
final | YES | YES | NA |
Static | NA | YES | YES |
在上面的故事中,NA 表示不適用。這意味著我們不能在類別層級上使用 public、private 和 protected。我們只能在類別層級使用abstract和final。
以下是 PHP 中的以下存取修飾符
public 是 PHP 中預設的修飾符,就像 JAVA 一樣。這意味著如果我們預設不使用任何具有標識符功能的修飾符,則它被視為公共存取修飾符。這是使用最廣泛的之一。當我們談到函數程式碼的可重複使用性時,我們通常使用 public 存取修飾符。因為 public 可以在任何地方使用,當然可以在類別內、類別外、擴充類別中使用,並且如果該 public 可重用性不受任何類別的限制,那麼我們可以在包含該檔案的任何地方使用它。如上表所提到的,我們不能將這個 public 修飾符與類別以及 private 和 protected 一起使用。
現在,是時候看看公共存取修飾符的範例了:
<?php class MyAccess { var $var = "This is first var"; // print var variable value function returnVar() { echo $this->var; } } $obj1 = new MyAccess();$obj1->returnVar(); ?>
在上面的程式碼中,returnVar() 函數已定義為沒有存取修飾符,因此它將像 public 一樣工作,因為這是 PHP 語言中的預設修飾符。
public、private 和 protected 不適用於類別層級;讓我們來看一個範例。
<?php class public MyAccess { var $var = "This is first var"; function returnVar() { echo $this->var; } } $obj1 = new MyAccess(); $obj1->returnVar(); ?>
上面的程式碼會出現以下錯誤:
( ! ) 解析錯誤:語法錯誤,意外的「public」(T_PUBLIC),E:wampwwwtwitindex.php 第 2 行需要識別碼 (T_STRING)
對於私有和受保護的情況也是如此。
<?php class private MyAccess { var $var = "This is first var"; } ?> <?php class protected MyAccess { var $var = "This is first var"; } ?>
這個修飾符使用 private 關鍵字來處理它。 我們不能在類別中使用 private 修飾符。我們只能將其與類別變數和類別方法一起使用(正如我們在上表中提到的)。當我們聲明並使用 private 時,就不能使用類別的物件來存取它。只能在班級內使用。
例如
<?php class MyAccess { var $var = "This is first var"; private $fist_name; // simple class method function returnVar() { echo $this->fist_name; } function set_fist_name($set_this){ $this->fist_name = $set_this; } } $obj1 = new MyAccess(); echo $obj1->fist_name; // will give the error $obj1->set_fist_name("Jai Shre"); $obj1->returnVar(); ?>
echo $obj1->fist_name; // 會給錯誤
我們可以使用這行程式碼,因為這會出現錯誤。這是我們無法使用該類別的物件存取私有變數的原因。但是我們可以透過使用它的設定和 getter 方法來使用它,就像我們在上面的程式碼中使用的那樣。 $obj1->set_fist_name(“Jai Shre”);程式碼行將設定變數中的值並使用 $obj1->returnVar();我們可以取得設定變數的值。
就像 public 和 private 一樣,protected 本身不支援類別層級。與 private 修飾符一樣,protected 也限制類別變數的存取或類別外部的函數。它可以在同一個類別中使用,也可以在子類別(子類別)中使用。
例如
<?php class MyAccess { var $var = "This is first var"; protected $fist_name; // simple class method function returnVar() { echo $this->fist_name; } function set_fist_name($set_this){ $this->fist_name = $set_this; } } class child extends MyAccess { function setVal($set_this){ $this->fist_name = $set_this; } function getVal(){ echo $this->fist_name; } } $obj1 = new child(); //echo $obj1->fist_name; // will give the error $obj1->setVal("Jai Shre"); $obj1->getVal(); ?>
echo $obj1->fist_name;該行程式碼將給出以下錯誤
輸出:
致命錯誤:無法線上存取 E:wampwwwtwitindex.php 中的受保護屬性 MyAccess::$fist_name 20
它可以用在類別和函數上,不能用在類別變數上。如果任何類別至少有一個抽象函數,則必須將其宣告為抽象。我們無法實例化抽象類別。抽象類別主要被認為是不完整的類別。
如果任何類別被宣告為final,我們就無法擴充該類別。 PHP限制final類別被繼承。
static 關鍵字可用來使任何函數成為靜態函數。它啟用了該函數的功能,以便人們可以在建立聲明該函數的類別的物件時使用它。靜態方法範例 –
public static function static Function() { // declaration goes here.. }
我們應該始終根據業務需求使用存取修飾符。使用 private 和 protected,我們可以限制在宣告的類別外部直接使用私有變數和私有方法。
以上是PHP 中的存取修飾符的詳細內容。更多資訊請關注PHP中文網其他相關文章!