OOP echo $ this-> title = $ part VS echo $ par

时间:2015-02-05 01:25:24

标签: php oop

嗨,大家好我开始学习PHP OOP。我有个问题。在下面的例子中,为什么我需要声明var $ price,var $ title;并使用它 echo $ this-> title = $ par;。我可以直接回应$ par

        <?php
        class  Books{
            /* Member variables */
            var $price;
            var $title;
            /* Member functions */
            function setPrice($par){
               $this->price = $par;
            }
            function getPrice(){
               echo $this->price ."<br/>";
            }
            function setTitle($par){
              echo $this->title = $par;
              //echo $par;  what is the difference between the two.

            }
            function getTitle(){
               echo $this->title ." <br/>";
            }
        }
        ?>

        <?php

      $physics = new Books;
       $maths = new Books;
       $chemistry = new Books;
         $physics->setTitle( "Physics for High School" );
       $chemistry->setTitle( "Advanced Chemistry" );
       $maths->setTitle( "Algebra" );

   $physics->setPrice( 10 );
   $chemistry->setPrice( 15 );
   $maths->setPrice( 7 );


    $physics->getTitle();
   $chemistry->getTitle();
   $maths->getTitle();
   $physics->getPrice();
   $chemistry->getPrice();
   $maths->getPrice();

3 个答案:

答案 0 :(得分:1)

这与在非OO编程中使用变量的原因相同 - 这样您就可以记住一个值并在以后调用它。在这种情况下,您在致电setTitle()时保存该值,并在稍后致电getTitle()时将其恢复。

echo中,您通常不会有setTitle()声明。看起来这只是为了监控开发过程中发生了什么,并且在运行该程序之前将其删除。

答案 1 :(得分:1)

OOP编程非常适用于可扩展性和未来验证。应该注意的是,您的方法应该指明它们预期要做什么。在你的情况下,它有点误导,因为getTitle暗示它将返回名称,而是它回应它。如果您打算保留此功能,则应将其重命名为echoName或其他内容。 getTitle应该退回。

回答你的问题(&#34;为什么在我可以使用另一个问题时才能使用方法访问该属性&#34;)。 如果将来要确保每个标题都正确套装,该怎么办?您只需将getTitle方法替换为:

public function getTitle() {
     return ucwords(strtolower($this->name));
}

这意味着您的应用程序中没有其他逻辑需要更改!

此外,一点代码审查,var是一个非常古老的语法。您应该正确定义属性的可见性更为可取:

protected $title;
protected $price;

Here's a link到我将如何实现您的示例类

的清理版本

答案 2 :(得分:0)

因为$par是函数参数变量而不是存储在类中的变量。如果您尝试在函数之外echo $par;传递它作为参数,它将无法正常工作