PHP:设置私有变量以返回私有方法的值不起作用

PHP: setting a private var to return value of a private method is not working

提问人:Paul Tennant 提问时间:6/30/2023 最后编辑:PippoPaul Tennant 更新时间:6/30/2023 访问量:43

问:

我有一个私有变量 $user_url,我将其初始化为“”。
所以我在公共函数中设置了它,如下所示:
但是,它总是返回 null,即使我知道它不是。
请帮忙!!!!!!
$this->user_url = $this->generate_user_url();

 private $user_url;
 private $user_url_extension = '';


public function create_user(){
$this->user_url = $this->generate_user_url();

// here i echo $this->user_url; output is null

$my_url = $this->generate_user_url();
// echoing $my_url does work

}



private function generate_user_url(){
        preg_match('/\@(.*?)\./s', $this->email, $school_identifier); 
        $first_character_first_name = mb_substr($this->first_name, 0, 1);
        $temp_user_url = $first_character_first_name.$this->last_name.'@'.$school_identifier[1].$this->user_url_extension;
        $stm = $this->pdo->prepare('SELECT user_url from hm_users WHERE user_url=:user_url');
        $stm->bindParam(':user_url', $temp_user_url);
        $stm->execute();
        $res = $stm->fetch(PDO::FETCH_ASSOC);
        echo '.....................................';
            var_dump($res);
            echo '.....................................';
            echo '.....................................';
            var_dump($temp_user_url);
            echo '.....................................';
        if(!$res){
            echo '.....................................url is being returned';
            var_dump($temp_user_url);
            echo '.....................................';
            return $temp_user_url;
        }
        else{
            $this->user_url_extension = strval(rand(1, 999));
            $this->generate_user_url();
        }


      }


//everything inside private function is as expected, temp_url is set and would apear to return as that part of code is reached.
// if any one can help, please do. Thank you in advance. 

在问这里之前,我已经尝试过到处调试

PHP 方法 返回 私有

评论

0赞 Paul Tennant 6/30/2023
如果我设置 $this->user_url = $my_url,那就很奇怪了;它有效,但这并不能回答我为什么的问题。这样做是不对的。
1赞 KIKO Software 6/30/2023
当 FALSE 时,您的方法不会返回任何内容。不管你怎么看,这都是不对的。我想你的意思是写:.generate_user_url()!$resreturn $this->generate_user_url();
1赞 Sammitch 6/30/2023
调用本身返回数据的函数不会使调用它的函数返回任何内容。这也适用于以递归方式调用自身的函数。
0赞 Paul Tennant 6/30/2023
嗨,Sammitch,你能详细说明一下吗?我发现这很难理解。它会调用自己,直到它能够生成一个不在数据库中的temp_user_url帽子,当它能够返回值时。当常规 var 设置为它时,它工作正常。但如果你愿意,请解释一下。
0赞 Paul Tennant 6/30/2023
你们俩都很棒,两条评论结合在一起,我理解问题所在。非常感谢你们!!

答: 暂无答案