OOP 回显 $this->title = $part VS 回显 $par

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

大家好,我开始学习 PHP OOP。我有个问题。在下面的示例中,为什么我需要声明 var$price,var $title;并将其用于 echo $this->title = $par;.其中我可以直接 echo $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();

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

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

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

OOP 编程非常适合可扩展性和面向未来。应该注意的是,您的方法应该表明它们预期要做什么。在您的情况下,这有点误导,因为 getTitle 暗示它将 return 名称,但它会回显它。如果您打算保留此功能,则应将其重命名为 echoName 或其他名称。 getTitle 应该 return 它。

用另一个问题回答你的问题("why use a method when I can just access the property")。 如果将来您想确保每个标题的大小写都正确怎么办?您只需将 getTitle 方法替换为:

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

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

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

protected $title;
protected $price;

Here's a link 到我将如何实施您的示例的清理版本 class