嗨,大家好我开始学习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();
答案 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;
传递它作为参数,它将无法正常工作