我正在使用插件,其中有一个受保护的功能,如此
<?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; 有没有 ()
不要通过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)