在我看来,好像您正在尝试将全局变量分配为方法参数的默认值...这是无法完成的。这有很多原因,但现在最重要的是,这与 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!