2013-10-18 32 views
0

我有一个插件那里是像这样传递一个变量到一个受保护的功能在PHP

<?php 

class CustomUploadHandler extends UploadHandler { 

protected function get_user_id() { 

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

    } 
} 

?> 

保护功能,然而,当我做出一个变量像

<?php $myvar = 'myvariable'; ?> 

,并尝试工作将其插入这样

<?php 

class CustomUploadHandler extends UploadHandler { 

protected function get_user_id() { 

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

    } 
} 

?> 

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

我曾尝试的代码,例如许多行如

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

+1

尝试增加'全球$ MYVAR;'你 – ElefantPhace

+2

类下这有什么好做的与受保护类,这只是普通的普通变量的作用域。除非用'global'声明全局变量,否则全局变量不能在函数内部访问。 – Barmar

+0

@ElefantPhace回答这个问题 – Barmar

回答

6

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

相反,在创建类时或使用setter注入依赖项(的值,在这种情况下为用户ID)。

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); 
    } 

} 

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

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

// sets $user_id = 77 
$customUploadHandler->set_user_id(77); 
+0

这是很多消化...我仍然试图了解类中的PHP。 – VIDesignz

+0

@VIDesignz我建议你选择一本关于OOP的好书然后(*和**不是**专门用于PHP *)在开始令人畏缩的时候,上面的代码是相当简单的。每个'CustomUploadHandler'都有一个名为'$ user_id'的变量。函数'get' /'set_user_id'返回或赋值给该值。这让对象可以随身携带价值,而不必“神奇地”引用全球范围内的价值。 – Dan

0

Protected意味着只有类本身,父类和类的儿童的其中函数定义可以使用该功能。所以它取决于你调用函数的地方。没有括号的返回语句应该没问题。

+0

这和试图在函数内部使用全局变量有什么关系? – Barmar

+0

感谢razhial,它不回答我的问题,但知识是非常有帮助的! :) – VIDesignz

+0

@Barmar:在他的问题中没有关于全局变量的东西。实际上在这里使用全局声明绝对是无稽之谈。所以我提供了一个答案,他提到了他的“问题”:(“它完全失败了......我不熟悉保护类以及return()如何工作,因此任何帮助都将不胜感激。”) – lexith

相关问题