在PHP中将变量传递给受保护的函数

VID*_*gnz 0 php oop variables

我正在使用插件,其中有一个受保护的功能,如此

<?php

class CustomUploadHandler extends UploadHandler {

protected function get_user_id() {

              //If I manually enter a value here, the value passes along
      return ('myvariable'); 

   }
 }

?>
Run Code Online (Sandbox Code Playgroud)

然而,当我做一个像变量

<?php  $myvar = 'myvariable';  ?>
Run Code Online (Sandbox Code Playgroud)

并尝试将其插入到这样的函数中

<?php

class CustomUploadHandler extends UploadHandler {

protected function get_user_id() {

              //If I use a variable, the value is lost
      return ($myvar); 

   }
 }

?>
Run Code Online (Sandbox Code Playgroud)

它完全失败了......我不熟悉受保护的课程以及如何return()工作,所以任何帮助将不胜感激.

我尝试了很多行代码,比如

print $myvar; return $myvar; echo $myvar; 有没有 ()

Dan*_*ugg 6

不要通过global关键字引入全局状态.你会欢迎一个痛苦的世界.

相反,在创建时将依赖项(值,本例中的用户ID)注入到类中,或者使用setter.

class CustomUploadHandler extends UploadHandler
{

    private $user_id;

    protected function get_user_id()
    {
        return $this->user_id;
    }

    // setter injection; the value is
    // passed via the method when called
    // at any time
    public function set_user_id($user_id)
    {
        $this->user_id = $user_id;
    }

    // constructor injection; the value is
    // passed via the constructor when a new
    // instance is created
    public function __construct($user_id)
    {
        $this->set_user_id($user_id);
    }

}
Run Code Online (Sandbox Code Playgroud)

然后当你有这个类的实例时:

// creates and sets $user_id = 42
$customUploadHandler = new CustomUploadHandler(42);

// sets $user_id = 77
$customUploadHandler->set_user_id(77);
Run Code Online (Sandbox Code Playgroud)