【问题标题】:php oop protected property, protected method, protected constructphp oop 受保护的属性、受保护的方法、受保护的构造
【发布时间】:2016-02-19 23:26:19
【问题描述】:

这些是我编写的一些示例代码

<?php
/**************** code block 1 *****************/
class Database1
{
    public $rows;

    public function __construct()
    {

    }

    public function assingrow()
    {
        $this->rows=5;
    }   
}


$database1 = new Database1();
$database1->assingrow();
echo $database1->rows;

//no error




/**************** code block 2 *****************/
class Database2
{
    protected $rows;//

    public function __construct()
    {

    }

    public function assingrow()
    {
        $this->rows=5;
    }   
}


$database2 = new Database2();
$database2->assingrow();
echo $database2->rows;
//error message
//Fatal error: Cannot access protected property Database2::$rows in E:\xampp\htdocs\pdo\4.php on line 46





/**************** code block 3 *****************/
class Database3
{
    public $rows;

    public function __construct()
    {

    }

    protected function assingrow()////
    {
        $this->rows=5;
    }   
}


$database3 = new Database3();
$database3->assingrow();
echo $database3->rows;
//error message
//Fatal error: Call to protected method Database3::assingrow() from context '' in E:\xampp\htdocs\pdo\4.php on line 68





/**************** code block 4 *****************/
class Database4
{
    public $rows;

    protected function __construct()
    {

    }

    public function assingrow()
    {
        $this->rows=5;
    }   
}


$database4 = new Database4();
$database4->assingrow();
echo $database4->rows;
//error message
//Fatal error: Call to protected Database4::__construct() from invalid context in E:\xampp\htdocs\pdo\4.php on line 91

谁能解释一下为什么会这样

  1. 为什么不能在代码块 2 中为受保护的属性赋值
  2. 为什么不能在代码块 3 中使用受保护的方法为公共属性赋值
  3. 为什么不能在代码块 4 中保护构造

【问题讨论】:

标签: php oop


【解决方案1】:

这就是Visibility的目的。

在第 2 区,您的财产是 protected。这意味着它只能被类本身 (Database2) 和继承的类访问。当您尝试从外部echo 变量时会发生错误。

块 3 中的方法也是如此。

构造函数可以是protected 甚至是private。但是你不能再从外面调用它了。但是这样的事情是可能的:

class Foo
{
    private function __construct()
    {
    }

    public static function create()
    {
        return new self();
    }
}

$foo = Foo::create();

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2011-06-06
    • 2012-10-13
    • 2011-03-11
    • 1970-01-01
    • 2015-09-05
    • 2012-09-05
    • 2011-10-26
    • 2023-03-03
    相关资源
    最近更新 更多