0

好的,所以我正在尝试从用户那里获取 id,如果我输入$getid = '1'一切正常

require_once "../maincore.php";

$getid = '1';
class UploadHandler
{   
    protected $options;
    // ...

    function __construct($options=null, $getid = '1') {

        $this->options = array( 
            'script_url' => 'myfile/'.$getid.'/',

  // ...

如果我输入 like$getid = $userdata['user_id'] 或者我将某些内容放入类中$myid = $userdata['user_id'];并设置,$getid = $myid 则没有任何效果。很长一段时间以来,我一直在尝试很多东西和案例。红色教程和什么是私有函数等等

也试过 private$myid = $userdata['user_id'];和 var$myid = $userdata['user_id'];

所以我只想获取$userdata['user_id']我无法让它工作的数据。

4

2 回答 2

0

在我看来,好像您正在尝试将全局变量分配为方法参数的默认值...这是无法完成的。这有很多原因,但现在最重要的是,这与 OOP 的主要思想相矛盾:OOP 的要点是你不必多次编写代码,不管发生了什么:

class My_DB_Object
{
    private $_connection = null;
    public function __construct($dbType = 'mysql', array $loginParams = array())
    {
        switch(strtolower($dbType))
        {
            case 'mysql':
                return $this->constructMySQL($loginParams);
            case 'pgsql':
                return $this->constructPGSql($loginParams);
            case 'mssql':
                return $this->constructMSSQL($loginParams);
            default:
                throw new InvalidArgumentException($dbType.' is not supported, yet?');
        }
    }
    private function constructMySQL(array $loginParams)
    {
        //and so on...
    }
}

该对象可以在您的所有项目中使用,无论您要使用什么数据库,它都可能select定义了一个方法,处理查询各种数据库的不同方法,而无需重写相同查询的时间和再一次……

无法保证您尝试分配为默认值的变量将被设置或在范围内:您可能会在另一个对象的成员函数内创建一个新实例,该实例也可能位于完全不同的命名空间中.

基本上:默认值是硬编码的。
文件包含类定义生成输出的代码,您的代码段似乎两者兼而有之。

您的代码应如下所示:

require_once('UploadHandler.php');//or look into __autload()
$uploadInstance = new UploadHandler(null, $userdata['user_id']);

文件UploadHandler.php应如下所示:

<?php
class UploadHandler
{
    protected $options = null;
    public function __construct (array $options = array(), $getid = '1')
    {//assuming $options should be an array
        $this->options = $options;
        $this->options['script_url'] = 'myfile/'.$getid.'/';
    }
}
//no closing ?> tag!
于 2012-12-26T14:04:43.877 回答
0

您必须将数据传递给类或注入数据(另一个主题):

当你构建你的类时,你会告诉类值是什么。

//some place in your code
$userdata = array(...some data from somewhere ...);
//$options is optional but at the beginning of the args so the 'null' is required
$class = new UploadHandler(null, $userdata['user_id']);

可选参数放在函数参数的末尾通常很有帮助:

class UploadHandler
{   
    protected $options;
    // ...

    // Required params first then optional params
    function __construct($getid ,$options=null) {

        $this->options = array( 
            'script_url' => 'myfile/'.$getid.'/',

然后你构建你的类:

//some place in your code
$userdata = array(...some data from somewhere ...);
//$options is now optional and at the end so the default value will be 'null'
$class = new UploadHandler($userdata['user_id']);
于 2012-12-26T14:06:57.163 回答