【问题标题】:Protected and private visibility in phpphp中受保护的私有可见性
【发布时间】:2016-07-11 09:37:48
【问题描述】:

我一直在通过在线课程学习 PHP。我已经声明了受保护的类成员。这些成员不应该在课堂外访问,但我可以访问它们。

这是类(class.Address.inc.php)

Class Address
 {
     //Street Address
     protected $street_Address_1;
     public $street_Address_2;

     //Name of the city
     public $city_name;

     //Subdivision name
     public $subdivision_name;

     //Postal code
     public $postal_code;

     //country name
     public $country_name;

这是我使用 Address 类的 Demo.php 文件。

<?php

require 'class.Address.inc';

     $address=new Address;
     $address->street_Address_1= "555 Fake Street";//protected but accessible
     $address->street_Address_2="Hello";
     $address->city_name="Townsville";

我能够访问受保护的成员并从 Demo.php 对其进行初始化。受保护的成员不应该在声明它的类之外不可用吗?

【问题讨论】:

标签: php


【解决方案1】:

不确定,但会尝试再次进行小测试....

<?php

require 'class.Address.inc'; //require 'class.Address.inc.php';
$address=new Address;
$address->street_Address_1= "555 Fake Street";//protected but accessible
$address->street_Address_2="Hello";
$address->city_name="Townsville";

【讨论】:

  • 当然,如果这是实际错误,它会产生一些其他错误,例如 Fatal error: Class 'Address' not found
  • 我不明白这个答案。你为什么把require 'class.Address.inc';加粗?问题已经在使用那部分了。我看到你把require 'class.Address.inc.php'; 作为评论。您是否只建议在末尾添加.php?你把它倒过来了。
  • 对不起,这是我的错。我不知道 .inc 文件是要包含的文件的扩展名。如果你检查你就会明白我已经将文件命名为 class.Address.inc.php 。我没有意识到我还创建了一个 class.Address.inc 文件,其中每个成员都是公开的。我已将 class.Address.inc.php 文件的成员更改为 protected 。代码访问的是 class.Address.inc 文件,而不是 class.Address.inc.php。 .stackoverflow.com/questions/7129842/…
【解决方案2】:

如何在类外访问受保护的变量,在这里您可以获得与设置值相同的值。

<?php
class myclass{
    protected $myname;
    public function __construct(){
        $this->myname = "myclass class";
    }
}

class childclass extends myclass{

    public function __construct(){
        parent::__construct();
    }

    public function getMyName(){
        return $this->myname;
    }
}

$obj = new childclass();
echo $obj->getMyName();

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 2011-03-21
    • 2017-11-27
    • 2012-09-26
    • 2019-02-22
    • 1970-01-01
    • 2014-11-03
    • 2011-07-21
    • 2023-03-04
    相关资源
    最近更新 更多