Php 获取其他数据的函数和类

Php 获取其他数据的函数和类,php,mysql,function,variables,Php,Mysql,Function,Variables,好的,所以我试图从用户那里获取id,如果我键入$getid='1'一切正常 require_once "../maincore.php"; $getid = '1'; class UploadHandler { protected $options; // ... function __construct($options=null, $getid = '1') { $this->options = array(

好的,所以我试图从用户那里获取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.'/',

  // ...
如果我像这样键入
$getid=$userdata['user\u id']
或者我把一些东西放到类中,比如
$myid=$userdata['user_id']
并设置
$getid=$myid
那什么都不管用。我已经试了很长一段时间了。 红色教程和什么是私有函数等等

还尝试了私有
$myid=$userdata['user_id']和var
$myid=$userdata['user_id']


因此,我只想获取
$userdata['user\u id']
的数据,但我无法使其正常工作。

在我看来,您似乎试图将全局变量指定为方法参数的默认值。。。这是不可能做到的。原因有很多,但目前最重要的是,这与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']);
<?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!
其中,
UploadHandler.php
文件应如下所示:

require_once('UploadHandler.php');//or look into __autload()
$uploadInstance = new UploadHandler(null, $userdata['user_id']);
<?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!
标签!

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

构建类时,您将告诉类值是什么

//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']);

什么是
$userdata
?它不存在于您的代码中…$userdata的输出是什么,要获得它的输出,请像var_dump($userdata)那样编写;让我们知道结果