2012-11-22 36 views
-1

我已经包含在我的bootstrap.php和实例化的类包括,当我包括bootstrap.php中它给了我一个电话成员函数的非对象变量类要求一旦超出范围内的功能

bootstrap.php中

require_once "config/constants.php"; 
require_once "libraries/Dropbox/DropboxClient.php"; 

$dropbox = new DropboxClient(array(
'app_key' => DROPBOX_CONSUMER_KEY, 
'app_secret' => DROPBOX_CONSUMER_SECRET, 
'app_full_access' => true, 
),'en'); 

的index.php

require_once "bootstrap.php"; 

dropbox_file_tree(); 

function dropbox_file_tree() 
{ 
    if(!empty($access_token)) { 

    $dropbox->SetAccessToken($access_token); 

    } 

    $files = $dropbox->GetFiles("",true); 

    print_r($files); 
} 
+1

您需要将'$ dropbox'实例传递给函数即可。每个功能都有自己的本地范围;默认情况下为空。 – mario

回答

1

这无关include,这是一个scope issue,功能仅见局部变量。

您必须使用global关键字或$GLOBALS超全局或将其作为参数传递给函数。

+2

绝对必要时才使用全局变量!我不会认为这种情况是必要的。虽然他可能有一个理由是他在引导文件中声明了Dropbox客户端,然后尝试在index.php中访问它。看起来像糟糕的结构。 – shapeshifter

2

传递保管箱对象的功能

dropbox_file_tree($dropbox); 

function dropbox_file_tree($dropbox) 
{ 
    if(!empty($access_token)) { 
     $dropbox->SetAccessToken($access_token); 
    } 

    $files = $dropbox->GetFiles("",true); 

    print_r($files); 
} 
+0

或者更好的是,用您需要的额外功能为客户编写自己的包装。 – shapeshifter

+0

您需要传递'$ access_token'变量... – jeroen

+0

不错,不是它在示例中的任何地方被声明过。我认为OP需要重新考虑他的解决方案。 – shapeshifter