PHP“无法访问受保护的属性”

时间:2013-04-24 16:29:58

标签: php oop

这是我的第一个OOP计划,所以请不要生我的气啊:) 问题是我遇到以下错误:

  

无法在第47行的D:\ xampp \ htdocs \ php \ OOP \ coder_class.php中访问受保护的属性Code :: $ text

程序只是编码一个字符串并对其进行解码。我不确定这是否是学习OOP的好例子。

<?php
class Code
{
    // eingabestring
    protected $text;

            public function setText($string)
            {
                $this->text = $string;
            }

            public function getText()
            {
                echo $this->text;
            }
}

class Coder extends Code
{
    //Map for the coder
    private $map = array(
        '/a/' => '1',
        '/e/' => '2',
        '/i/' => '3',
        '/o/' => '4',
        '/u/' => '5');

            // codes the uncoded string
    public function coder() 
    {
        return preg_replace(array_keys($this->map), $this->map, parent::text);      
    }
}

class Decoder extends Code
{
    //Map for the decoder
    private $map = array(
    '/1/' => 'a',
    '/2/' => 'e',
    '/3/' => 'i',
    '/4/' => 'o',
    '/5/' => 'u');

            // decodes the coded string
            public function decoder()
    {
        return preg_replace(array_keys($this->map), $this->map, parent::text);      
    }
}

$text = new code();
    $text -> setText("ImaText");
    $text -> coder();
    $text -> getText();

&GT;

有些人可以帮我解决这个问题。我是PHP的新手。

2 个答案:

答案 0 :(得分:2)

相关代码:

class Code
{
    protected $text;
}
$text = new code();
echo $text->text;

属性不公开,因此错误。它像宣传的那样工作。

答案 1 :(得分:2)

使用:

protected $text;

echo $text->text;

您收到错误的原因。 protected表示只有Code类的后代才能访问该属性,即。 CoderDecoder。如果您想通过$text->text访问它,则必须是public。或者,只需编写getText()方法;你已经写过了二传手。

附注:publicprivateprotected关键字实际上与安全性有关。它们通常用于强制执行数据/代码/对象完整性。