为什么2种不同的方法来显示类方法的结果? PHP

时间:2014-01-09 10:33:57

标签: php

我发现有两种不同的方法可以显示类方法的结果。一个通过使用对象运算符,另一个通过将方法作为函数调用。我想知道为什么和什么是最好的。

采取以下措施:

<!DOCTYPE html>
<html>
    <head>
      <title>Cats</title>
      <link type='text/css' rel='stylesheet' href='style.css'/>
    </head>
    <body>
      <p>
        <?php
        class Cat {
            public $isAlive = true;
            public $numLegs = 4;
            public $name;
            public function __construct($name) {
                $this->name = $name;    
            }
            public function meow() {
               return "Meio meow";
            } 
        }
        $Cat1 = new Cat(CodeCat);
        echo $Cat1->meow;
        ?>
      </p>
    </body>
</html>

我可以通过以下方式回应方法的返回:

echo meow($Cat1);

什么是背景?好多了 谢谢你的回复! -Adrian

1 个答案:

答案 0 :(得分:0)

好的,让我们先使用一些实际运行的代码。

<?php
class Cat {
    public $isAlive = true;
    public $numLegs = 4;
    public $name;
    public function __construct($name) {
        $this->name = $name;    
    }
    public function meow() {
       return "Meio meow";
    } 
}
?>
<!DOCTYPE html>
<html>
<head>
  <title>Cats</title>
  <link type='text/css' rel='stylesheet' href='style.css'/>
</head>
<body>
      <p>
<?php
    $Cat1 = new Cat('Fluffy');
    echo $Cat1->meow();
    echo $Cat1->name;
?>
      </p>
</body>
</html>

现在因为您已将cats name属性定义为public public $name;,您可以使用此类使用任何语法以完全不受限制的方式访问其值:

$Cat1 = new Cat('Fluffy');
echo $Cat1->name;
//or
echo $Cat1->meow();
//or even set a new value for its name after instantiating it
$Cat1->name = 'Tiddles';

但是,如果你有一个你不希望开发人员弄乱的属性,而不能先检查这个值你可以将这个新属性定义为私有属性,例如'private $ owner;'

现在不允许使用语法:

$Cat1->owner = 'Adrian';

因为它是私有属性,但您仍然希望类的用户能够为owner属性设置值,因此您可以像{{1}一样创建public method设置此私有属性值的方法,但仅当它传递了一些必需的测试时才这样:

meow()

因此,您创建了一个公共方法,以允许访问您的私有属性,但前提是它满足某些指定条件。

它基本上是一种控制对需要特定值的属性的访问的方法

我建议您提供文档a good coat of looking at 因为还有<?php class Cat { public $isAlive = true; public $numLegs = 4; public $name; private $owner; public function __construct($name) { $this->name = $name; } public function meow() { return "Meio meow"; } public function setOwner($var) { if ( $var == 'Adrian' || $var == 'Rocky' ) { $this->owner = $var; } else { $this->owner = 'Unknown'; throw new Exception( 'Invalid owners name' ); } } } ?> 限定符以及公共和私有。