2

这是我的代码的缩减版本,其中包含 mainclass和 mainfunction

我需要获取'userName'用户输入的值才能在内部使用它'mainFunction',尝试将'userName'内部设置为'myForm'全局但没有得到值。

'userName'可以在外面使用value'mainClass'以便我可以在任何地方使用它吗?

 class mainClass {

  function myForm() {
      echo '<input type="text" value="'.$userName.'" />';
   }

 }   
 function mainFunction () {
    $myArray = array (

         'child_of' => $GLOBALS['userName']

      ) 
 }
4

3 回答 3

1
class mainClass {
    public $username;
    function  __construct($username){
        $this->username = $username;
    }

    function myForm() {
        echo '<input type="text" value="'.$this->userName.'" />';
    }

 }

 function mainFunction () {
    $myArray = array (
        'child_of' => $this->username;
    );
 }
于 2013-03-03T09:57:58.427 回答
1

'userName' 的值可以在'mainClass' 之外使用,以便我可以在任何地方使用它吗?

是的。

首先,您需要像这样定义一个类属性

class MainClass
{

    private $_userName;

    public function myForm()
    {
        echo '<input type="text" value="'.$this->_userName.'" />';
    }
}

看看你如何在 myForm() 方法中访问这个属性。

然后你需要为这个属性定义 getter 方法(或者你可以将属性公开),如下所示:

class MainClass
{

    private $_userName;

    public function getUserName()
    {
        return $this->_userName;
    }

    public function myForm()
    {
        echo '<input type="text" value="'.$this->_userName.'" />';
    }
}

您可以像这样访问用户名属性

$main = new MainClass();
$userName = $main->getUserName();

请注意,您需要 MainClass 类的实例。

我建议您从简单的概念开始,并确保您 100% 理解这一点。另外我建议避免使用全局变量和更复杂的静态方法逻辑。尝试使其尽可能简单。

热烈的问候,维克多

于 2013-03-04T12:02:56.227 回答
-1

下面的代码是 Codeigniter get_instance 方法的最小化版本。因此,在您的情况下,您可以在开头的某个地方使用此代码:

/** Basic Classes to load the logic and do the magic */

class mainInstance {

    private static $instance;

    public function __construct()
    {
        self::$instance =& $this;
    }

    public static function &get_instance()
    {
        return self::$instance;
    }
}

function &get_instance()
{
    return mainInstance::get_instance();
}

new mainInstance();
/** ----------------------------------------------- */

然后你可以像这样创建你的全局类:

class customClass1 {

    public $userName = '';

      function myForm() {
          return '<input type="text" value="'.$this->userName.'" />';
       }

}

/** This is now loading globally */
$test = &get_instance();
//If you choose to actually create an object at this instance, you can call it globally later
$test->my_test = new customClass1(); 
$test->my_test->userName = "johnny";

/** The below code can be wherever in your project now (it is globally) */
$test2 = &get_instance();
echo $test2->my_test->myForm()."<br/>"; //This will print: <input type="text" value="johnny" />
echo $test2->my_test->userName; //This will printing: johnny

由于这现在是全球性的,您甚至可以像这样创建自己的函数:

function mainFunction () {
    $tmp = &get_instance();
    return $tmp->my_test->userName;
}

echo mainFunction();
于 2013-03-03T10:45:15.917 回答