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


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

大家好,我开始学习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();

OOP编程非常适合扩展性和未来验证。需要注意的是,您的方法应该指示期望做什么。在您的情况下,这有点误导,因为getTitle意味着它将返回名称,但它实际上是回显名称。如果您打算保留此功能,则应该将其重命名为echoName或其他名称。getTitle应将其退回。

用另一个问题回答您的问题("当我可以访问该物业时,为什么要使用方法")如果将来你想确保每一个标题的大小写都正确呢您只需将getTitle方法替换为:

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

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

此外,稍微回顾一下代码,var是一种非常古老的语法。你应该正确地定义你的属性的可见性是更可取的:

protected $title;
protected $price;

这里有一个链接,指向我将如何实现示例类

的清理版本

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

setTitle()中通常不会有echo语句。看起来这只是为了监控开发过程中发生的事情,在真正运行程序之前,你会把它拿出来。

因为$par是一个函数参数变量,而不是存储在类中的变量。如果您尝试在函数之外调用echo $par;,它将作为参数传递,因为它将不起作用