大家好,我开始学习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;
,它将作为参数传递,因为它将不起作用