在包含的文件

时间:2015-06-24 03:59:36

标签: php namespaces

我通过Composer安装了Facebook SDK v4.0.0。

从“入门”说明中,我使用以下代码自动加载库:

require_once.php

<?php
define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/vendor/facebook/php-sdk-v4/src/Facebook/');
require __DIR__ . '/vendor/autoload.php';
?>

然后,这是 index.php

的结构
<?php
require_once('require_once.php');
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookJavaScriptLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<?php require_once('inc/head.inc.php'); ?>
</body>
</html>

对于 inc / head.inc.php ,它包含访问Graph API的代码(省略处理Facebook登录的代码):

<?php
$user = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className());
$picture = (new FacebookRequest($session, 'GET', '/me/picture?type=small&redirect=false'))->execute()->getGraphObject()->asArray();
$helper = new FacebookRedirectLoginHelper(REDIRECT_URL);
?>

显示错误:

  

致命错误:在/path/to/inc/head.inc.php中找不到“FacebookRequest”类

迫使我在 head.inc.php 的开头添加use行来删除此致命错误。我希望在use中声明index.php行,并且它将在必需的文件中提供,但事实并非如此。

我的问题是,如何避免在所有包含/所需文件的开头添加use行(即是否可以在公共包含文件中共享use行?)

P.S。使用PHP 5.5.9

1 个答案:

答案 0 :(得分:1)

using namespaces州的文档:

  

导入规则是基于每个文件的,这意味着包含的文件不会继承父文件的导入规则。

这意味着您无法准备&#34;一个子脚本,包含您希望它仅使用基本名称访问的类的别名。每个脚本必须定义自己的别名(在同一文件中)或始终使用规范类名称。