PHP 函数对 return 和 echo 的工作方式不同。为什么?
PHP function working differently for return and echo. Why?
通过使用以下 class:
class SafeGuardInput{
public $form;
public function __construct($form)
{
$this->form=$form;
$trimmed=trim($form);
$specialchar=htmlspecialchars($trimmed);
$finaloutput=stripslashes($specialchar);
echo $finaloutput;
}
public function __destruct()
{
unset($finaloutput);
}
}
和调用函数,通过下面的代码,它工作正常。
<?php
require('source/class.php');
$target="<script></script><br/>";
$forminput=new SafeGuardInput($target);
?>
但是如果在 SafeGuardInput class 中,如果我将 echo $finaloutput; 替换为 return $finaloutput; 然后 echo $forminput; 在 index.php 页面上。这是行不通的。请提供解决方案。
您不能 return 从构造函数中获取任何内容。 new
关键字总是使新创建的对象被分配给语句左侧的变量。所以你使用的变量已经被采用。一旦你记住了这一点,你很快就会意识到没有地方可以放置任何其他可以从构造函数中 returned 的东西!
一个有效的方法是编写一个函数,在请求时输出数据:
class SafeGuardInput{
public $form;
public function __construct($form)
{
$this->form=$form;
}
public function getFinalOutput()
{
$trimmed = trim($this->form);
$specialchar = htmlspecialchars($trimmed);
$finaloutput = stripslashes($specialchar);
return $finaloutput;
}
}
然后你就可以像这样正常调用它了:
$obj = new SafeGuardInput($target);
echo $obj->getFinalOutput();
通过使用以下 class:
class SafeGuardInput{
public $form;
public function __construct($form)
{
$this->form=$form;
$trimmed=trim($form);
$specialchar=htmlspecialchars($trimmed);
$finaloutput=stripslashes($specialchar);
echo $finaloutput;
}
public function __destruct()
{
unset($finaloutput);
}
}
和调用函数,通过下面的代码,它工作正常。
<?php
require('source/class.php');
$target="<script></script><br/>";
$forminput=new SafeGuardInput($target);
?>
但是如果在 SafeGuardInput class 中,如果我将 echo $finaloutput; 替换为 return $finaloutput; 然后 echo $forminput; 在 index.php 页面上。这是行不通的。请提供解决方案。
您不能 return 从构造函数中获取任何内容。 new
关键字总是使新创建的对象被分配给语句左侧的变量。所以你使用的变量已经被采用。一旦你记住了这一点,你很快就会意识到没有地方可以放置任何其他可以从构造函数中 returned 的东西!
一个有效的方法是编写一个函数,在请求时输出数据:
class SafeGuardInput{
public $form;
public function __construct($form)
{
$this->form=$form;
}
public function getFinalOutput()
{
$trimmed = trim($this->form);
$specialchar = htmlspecialchars($trimmed);
$finaloutput = stripslashes($specialchar);
return $finaloutput;
}
}
然后你就可以像这样正常调用它了:
$obj = new SafeGuardInput($target);
echo $obj->getFinalOutput();