首先,我对PHP非常陌生,并试图了解如何使用对象类。
几天来,我已经遇到了一个我无法解决的挑战。问题是类的属性不是在类的方法中调用/使用的。我知道该物业不是空的,因为我投入了一种测试方法来确认它。
我必须有一些我不知道的东西,我希望它不是很明显,因为我花了好几天尝试不同的解决方案都没有用。
以下是我的评论代码:
<?php
/************* global variables ******************************/
$company_name = "Stay Cool HVAC";
$street = '12345 Rockwell Canyon Rd.';
$company_citystatezip = "Hometown, CA 91777";
$company_address = "<center>$company_name <br/> ". "<center>$street <br />". "<center>$company_citystatezip";
/************* end global variables **************************/
echo '<H1 align="center">PHP Class Example</H1>';
class Company {
//// insert object variables (properties)
var $address;
//// insert methods below here
//// Test to see that address property is set to $company_address variable
function __get($address){
return $this->address;
}
function getHeader($company_name, $color) {
$topheader = "<TABLE align='center'; style='background-color:$color;width:50%'><TR><TD>";
$topheader .= "<H1 style='text-align:center'>$company_name</H1>";
$topheader .= "</TD></TR></TABLE>";
return $topheader;
}
//// The address property isn't passing to output in method
function getFooter($color) {
$this->address;
$bottomfooter = "<TABLE align='center'; style='background-color:$color;width:50%'><TR><TD>";
$bottomfooter .= "<center><b><u>$address</center></b></u>";
$bottomfooter .= "</TD></TR></TABLE>";
return $bottomfooter;
}
}
$companybanner = new Company();
echo $companybanner->getHeader($company_name, gold);
echo "<br/>";
$companybanner->address = "$company_address";
echo $companybanner->getFooter(blue);
// Test to confirm that "address" property is set - working
echo "<br />";
echo $companybanner->getaddress;
?>
希望你能看到&#34;地址&#34;属性假设从&#34; getFooter&#34;中输出蓝色表格。方法。相反,我的结果是一条没有文字的蓝线。此外,&#34;地址&#34;属性不是空的,因为我包含了一个带有&#34; __ get($ address)&#34;的测试。方法
任何想法我做错了什么?
答案 0 :(得分:1)
也许你应该替换
function getFooter($color) {
$this->address;
使用
function getFooter($color) {
$address = $this->address;
我理解php行为的方式,这一行
$bottomfooter .= "<center><b><u>$address</center></b></u>";
会尝试使用局部变量(函数本地)$ address但未定义$ address。据我了解php是如何工作的 - 这一行
$this->address;
将以这种方式解释:if address =“abc”与告诉解释器相同
"abc";
未指定任何操作。
但我认为 $ address = $ this-&gt;地址; 并不是解决问题的唯一方法。我想你可以用这个就好了:
$bottomfooter .= "<center><b><u>{$this->address}</center></b></u>";
希望有所帮助。