溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中public和private的區(qū)別有哪些

發(fā)布時(shí)間:2021-11-03 09:42:05 來(lái)源:億速云 閱讀:428 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容介紹了“php中public和private的區(qū)別有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

區(qū)別:1、如果類成員聲明為public,那么它可以在任何地方訪問(wèn);而如果類成員聲明為private,則它只能由定義該成員的類訪問(wèn)。2、public是公共類型,權(quán)限是最大的,可內(nèi)部調(diào)用,實(shí)例調(diào)用等;private是私有類型,只有在本類中使用。

php中public和private的區(qū)別有哪些

本教程操作環(huán)境:windows7系統(tǒng)、PHP7.1版、DELL G3電腦

public,private和protected稱為訪問(wèn)修飾符。就像C ++一樣,PHP也有三個(gè)訪問(wèn)修飾符,如public,private和protected??梢酝ㄟ^(guò)在聲明前加上這些關(guān)鍵字來(lái)定義屬性,方法或常量的可見(jiàn)性。

1、如果類成員聲明為public,那么它可以在任何地方訪問(wèn)。

public的權(quán)限是最大的,可以內(nèi)部調(diào)用,實(shí)例調(diào)用等。

2、如果類成員聲明為protected,則只能在類本身內(nèi)以及繼承和父類中訪問(wèn)它。

protected是受保護(hù)類型,用于本類和繼承類調(diào)用。

3、如果類成員聲明為private,則它只能由定義該成員的類訪問(wèn)。

private是私有類型,只有在本類中使用。

示例:

<?php
error_reporting(E_ALL);
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 public&nbsp; function __construct(){
 $this->public&nbsp;&nbsp;&nbsp; = 'public&nbsp;&nbsp;&nbsp;&nbsp; <br>';
 $this->private&nbsp;&nbsp; = 'private&nbsp;&nbsp;&nbsp; <br>';
 $this->protected = 'protected&nbsp; <br>';
 }
 static function tank(){
 if (!isset(self::$instance[get_class()]))
 {
 $c = get_class();
 self::$instance = new $c;
 }
 return self::$instance;
 }&nbsp;&nbsp; &nbsp;
 public function pub_function() {
 echo "you request public function<br>";
 echo $this->public;
 echo $this->private;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //private,內(nèi)部可以調(diào)用
 echo $this->protected;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //protected,內(nèi)部可以調(diào)用
 $this->pri_function();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //private方法,內(nèi)部可以調(diào)用
 $this->pro_function();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //protected方法,內(nèi)部可以調(diào)用
 }
 protected&nbsp; function pro_function(){
 echo "you request protected function<br>";
 }
 private function pri_function(){
 echo "you request private function<br>";
 }
}
$test = test::tank();
echo $test->public;
echo $test->private;&nbsp;&nbsp;&nbsp; //Fatal error: Cannot access private property test::$private
echo $test->protected;&nbsp; //Fatal error: Cannot access protected property test::$protected
$test->pub_function();
$test->pro_function();&nbsp; //Fatal error: Call to protected method test::pro_function() from context
$test->pri_function();&nbsp; //Fatal error: Call to private method test::pri_function() from context
?>

從上面的例子中,我們可以看出:

public:    可以class內(nèi)部調(diào)用,可以實(shí)例化調(diào)用。

private:   可以class內(nèi)部調(diào)用,實(shí)例化調(diào)用報(bào)錯(cuò)。

protected:  可以class內(nèi)部調(diào)用,實(shí)例化調(diào)用報(bào)錯(cuò)。

<?php
class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 public&nbsp; function __construct(){
 $this->public&nbsp;&nbsp;&nbsp; = 'public&nbsp;&nbsp;&nbsp;&nbsp; <br>';
 $this->private&nbsp;&nbsp; = 'private&nbsp;&nbsp;&nbsp; <br>';
 $this->protected = 'protected&nbsp; <br>';
 }
 protected function tank(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //私有方法不能繼承,換成public,protected
 if (!isset(self::$instance[get_class()]))
 {
 $c = get_class();
 self::$instance = new $c;
 }
 return self::$instance;
 }&nbsp;&nbsp; &nbsp;
 public function pub_function() {
 echo "you request public function<br>";
 echo $this->public;
 }
 protected&nbsp; function pro_function(){
 echo "you request protected function<br>";
 echo $this->protected;
 }
 private function pri_function(){
 echo "you request private function<br>";
 echo $this->private;
 }
}
class test1 extends test{
 public function __construct(){
 parent::tank();
 parent::__construct();
 }
 public function tank(){
 echo $this->public;
 echo $this->private;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Notice: Undefined property: test1::$private
 echo $this->protected;
 $this->pub_function();
 $this->pro_function();
 $this->pri_function();&nbsp;&nbsp;&nbsp; //Fatal error: Call to private method test::pri_function() from context 'test1'
 }
 public&nbsp; function pro_extends_function(){
 echo "you request extends_protected function<br>";
 }
 public function pri_extends_function(){
 echo "you request extends_private function<br>";
 }
}
error_reporting(E_ALL);
$test = new test1();
$test -> tank();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //子類和父類有相同名字的屬性和方法,實(shí)例化子類時(shí),子類的中的屬性和方法會(huì)蓋掉父類的。
?>

從上面的例子中,我們可以看出:

public:    test中的public可以被繼承。

private:   test中的private不可以被繼承。

protected:test中的protected可以被繼承。

static:   test中的static可以被繼承。

“php中public和private的區(qū)別有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI