2015-02-05 41 views
-1

嗨,大家好我开始学习PHP OOP。我有个问题。在下面的例子中,为什么我需要声明var $ price,var $ title;并使用它在 echo $ this-> title = $ 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(); 
+0

什么?你现在的问题是什么?为什么你必须写:'$ this-> price = $ par;'或'echo $ this-> price。“
”;''''或'var $ price'? – Rizier123

+2

学习oop,不要使用'var'。你从中学到的东西是非常过时的 –

+0

如果你不做任务,'$ par'不会保存在对象中。 – Barmar

回答

1

OOP编程对扩展性和未来打样非常有用。应该指出的是,你的方法应该指出他们预计要做的事情。在你的情况下,这是一个有点误导,因为getTitle意味着它会返回名称,但相反,它回声它。如果您打算保留此功能,则应将其重命名为echoName或其他内容。 getTitle应该返回它。

要回答你的问题(“为什么使用方法,当我可以访问属性”)与另一个问题。 如果将来你想确保每一个标题都是正确的,那该怎么办?你会简单地替换getTitle方法:

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

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

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

protected $title; 
protected $price; 

Here's a link到的我会如何实现你的榜样一流的清理版本

+0

谢谢我实际上只是在echo $ this-> title = $ par中添加echo;部分。是不是现在我不需要在OOP中声明var?正如其他用户在这里所评论的那样?像我不需要申报VAR $价格和$ VAR标题?什么取代它?如果它真的 – Nixxx

+0

'var'是一个过时的语法。您应该声明变量的可见性。 [这是一个链接](http://php.net/manual/en/language.oop5.visibility.php)到这个主题的PHP手册。查看我修改后的答案,查看我写的班级的例子。 – Scopey

+0

@Nixxx我还更新了我所做的包含脚本其余部分的示例(它甚至给出了输出) – Scopey

0

由于$par是一个功能参数变量和不存储在类中的一个变量。如果您尝试echo $par;以外的功能,它作为参数传递将不起作用

+2

澄清 - 不是“_outside of function_”,而是“_outside of *函数作为参数传递给* _”'$ par'仅在'setPrice()'范围内。 –

+0

@MichaelBerkowski是好点 – cameronjonesweb

1

这点与为什么您在非OO编程中使用变量相同 - 以便您可以记住价值并在以后回忆。在这种情况下,当您拨打setTitle()时可以保存该值,并且稍后再拨打getTitle()时可以将其恢复。

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