我对PHP的OOP很新.
好的,首先这会产生错误:
$mail->addBody(new MailWishListInquiry()->getBody(348));
Run Code Online (Sandbox Code Playgroud)
但这不是:
$wishListInquiry = new MailWishListInquiry();
$mail->addBody($wishListInquiry->getBody(348));
Run Code Online (Sandbox Code Playgroud)
我不懂为什么?
此方法getBody()也没有返回任何内容..但也没有错误..还有一个片段:
function getBody($pid)
{
$qry = 'SELECT * FROM cart_product WHERE product_id = '.$pid;
$result = mysql_query($qry);
$row = mysql_fetch_assoc($result);
$item_name = $row['product_name'];
$item_url = 'product.php?pid='.$pid;
$item_image_url = 'product_images/'.$pid.'_sm_'.$row['product_image_sm'];
return
?>
<div style="width:600px; font-family:Arial, Helvetica, sans-serif; color:#333333;">
...
</div>
<?php
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?
谢谢!!
编辑:你们已经很好地解释了解除引用在PHP中不起作用.但我仍然需要帮助弄清楚为什么getBody()没有返回字符串.是因为我打破了php所以我不必引用它吗?即使我没有通过它仍然应该返回html字符串对吗?为什么不呢?
谢谢!
Kon*_*lph 11
我不懂为什么?
因为PHP语法任意说明:你不能直接解除引用(作为对象或作为数组)从方法返回值.首先需要将它们分配给变量.
这种行为背后真的没有任何有意义的语义解释.据我所知,这可能会在未来的PHP版本中发生变化.
其他人说你"不能直接从方法中取消引用返回值"并不完全正确.你实际上'只是'不能直接取消引用新创建的类实例,这正是你想要做的.但是当然可以做这样的事情:
class Test {
public function a() {
echo "a";
return $this;
}
public function b() {
echo "b";
return $this;
}
public function c() {
echo "c";
return $this;
}
}
$test = new Test();
$test->a()->b()->c();
Run Code Online (Sandbox Code Playgroud)
因此,您无法直接对新创建的对象执行某些操作,但您可以使用方法的返回值执行某些操作.
你的另一个问题是,getBody没有返回任何内容是因为你试图返回在PHP块之外定义的HTML块.您可能认为PHP只会将您在?>和<?php标记之间编写的所有内容都包含在内,并将其作为字符串返回.但它只是将它写入标准输出(通常是您的浏览器)并从没有值的方法返回(void).
要返回HTML字符串,可以使用常规字符串分隔符,如下所示:
function getBody() {
return
'<p style="color: red;">Hello</p>
<p>World</p>';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |