【问题标题】:share variable values across functions in PHP在 PHP 中的函数之间共享变量值
【发布时间】:2017-11-19 05:53:32
【问题描述】:

我正在以面向对象的方式练习编码;尝试将一些常用的脚本用于表单处理并将它们转换为函数。这是我的代码。

    class FormHandler{

        // Secure simple inputs
        public function secure($var){
                $var = stripslashes($var);
                $var = strip_tags($var);
                $var = htmlentities($var);
                return $var;
        }

        public function getAll(){
                foreach($_POST as $key => $value){
                ${$key} = secure($_POST[$key]);
                }
                $didGetAll =TRUE;
        }

        public function echoResults(){
            if($didGetAll === TRUE){
                echo "Form Contents<br>";
                foreach($_POST as $key => $value){
                    echo $key." => ".${$key}."<br>";
                }
            }else{
                    echo 'do getAll() fuction first'."<br>";
                }
    }
    } 

当我像这样运行函数时:

include './formhandling.php';

$form = new FormHandler;
$form -> getAll();
$form -> echoResults();

即使 $didGetAll var 应该 = true,它也会返回“首先执行 getAll() 函数”消息。

我认为这是因为变量值没有在函数之间传递?

我尝试通过将 $didGetAll 设为全局并返回 $didGetAll 来测试这一点。但它仍然返回相同的结果。

有人可以建议我做错了什么吗?

【问题讨论】:

标签: php function object


【解决方案1】:

在你的类中使用$didGetAll作为一个属性来访问对象。

class FormHandler{
    private $didGetAll = FALSE;
    // Secure simple inputs
    public function secure($var){
        $var = stripslashes($var);
        $var = strip_tags($var);
        $var = htmlentities($var);
        return $var;
    }

    public function getAll(){
        foreach($_POST as $key => $value){
            $this->$key = $this->secure($_POST[$key]);
        }
        $this->didGetAll =TRUE;
    }

    public function echoResults(){
        if($this->didGetAll === TRUE){
            echo "Form Contents<br>";
            foreach($_POST as $key => $value){
                echo $key." => ".$this->$key."<br>";
            }
        }else{
                echo 'do getAll() fuction first'."<br>";
            }
    }
} 

【讨论】:

  • 谢谢。这适用于$didGetAll,但我现在注意到${$key} 没有回显值,大概是出于同样的原因。有没有类似的方法可以用动态变量名来做到这一点?
  • 是的,我更新了我的答案。如果您使用$this-&gt;$key = ,请在您的对象中以$key 作为名称创建属性。 @JamieMoffat
  • 如果答案有效,请接受。 @JamieMoffat
  • 恐怕它仍然只适用于 $didGetAll var。我仍然无法让它为变量 ${$key} 工作我会更新我的帖子以反映这一点。
  • 我更新了我的答案。如果您使用$this-&gt;$key = ,请在您的对象中以$key 作为名称创建属性,您可以在对象中使用$this-&gt;key 访问。 @JamieMoffat
【解决方案2】:

为此使用公共属性,它允许将数据存储在类内的变量中:

class FormHandler{
    public $didGetAll = false;

    // Secure simple inputs
    public function secure($var){
            $var = stripslashes($var);
            $var = strip_tags($var);
            $var = htmlentities($var);
            return $var;
    }

    public function getAll(){
            foreach($_POST as $key => $value){
            ${$key} = secure($_POST[$key]);
            }
            $this->didGetAll =TRUE;
    }

    public function echoResults(){
        if($this->didGetAll === TRUE){
            echo "Form Contents<br>";
            foreach($_POST as $key => $value){
                echo $key." => ".${$key}."<br>";
            }
        }else{
            echo 'do getAll() fuction first'."<br>";
        }
    }
} 

$form = new FormHandler;
$form -> getAll();
$form -> echoResults();

阅读this了解它。

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多