【问题标题】:PHP Class Property not passing into methodPHP类属性未传递给方法
【发布时间】:2016-06-23 04:26:13
【问题描述】:

首先,我对 PHP 非常陌生,并且正在尝试了解如何使用对象类。

几天来,我遇到了一个我无法解决的挑战。问题是类的属性没有在类的方法中被调用/使用。我知道该属性不是空的,因为我输入了一个测试方法来确认它。

一定是我遗漏了什么,我希望它不是很明显,因为我已经花了几天时间尝试不同的解决方案,但无济于事。

下面是我的 cmets 代码:

<?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;
?>

希望您可以看到“地址”属性应该是通过“getFooter”方法在蓝色表格中输出的。相反,我的结果是一条没有文字的蓝线。此外,“地址”属性不为空,因为我确实包含了一个使用“__get($address)”方法的测试。

任何想法我做错了什么?

【问题讨论】:

  • 将"&lt;center&gt;&lt;b&gt;&lt;u&gt;$address&lt;/center&gt;&lt;/b&gt;&lt;/u&gt;"; 更改为"&lt;center&gt;&lt;b&gt;&lt;u&gt;$this-&gt;address&lt;/center&gt;&lt;/b&gt;&lt;/u&gt;";,它将按照您想要的方式工作。

标签: php html class oop properties


【解决方案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->address; 不是解决您的问题的唯一方法。我认为您可以很好地使用它:

$bottomfooter .= "<center><b><u>{$this->address}</center></b></u>";

希望对您有所帮助。

【讨论】:

  • 正如不同人指出的那样,解决方案是在“getFooter”方法中将“$address”替换为“$this->address”。我感谢所有快速回答的人,因为我是菜鸟,非常感谢他们的知识。再次感谢您。
猜你喜欢
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2021-02-05
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多