symfony'use'与include_once

时间:2016-06-24 07:52:24

标签: php symfony

我刚刚开始使用symfony(2),我正在尝试从现有类中移植一些代码 - 但是我在symfony框架中尝试使用'旧'范例时遇到了一些困难。我有以下代码:

namespace AppBundle\Controller;
use AppBundle\Components\model\Customer;

class MyController extends Controller
{
/**
 * @Route("/index.php", name="index")
 */
public function indexAction(Request $request)
{ 
    include_once( 'AppBundle\Components\model\Customer.php' );
    $entity = new Customer();
    $this->get('logger')->info('Instance == > ' . isset($entity) );
    $this->get('logger')->info('Class exists == > ' . ( class_exists('Customer')  ? 'YES' : 'NO') );

Customer.php只包含一个名为Customer的空类。

但是,此代码始终记录:

[2016-06-24 17:44:42] app.INFO: Instance == > 1 [] []
[2016-06-24 17:44:42] app.INFO: Class exists == > NO [] []

如您所见,我正在同时执行useinclude_once。 但似乎我可以创建一个实例,但class_exists返回false 对我来说,这似乎是一个矛盾。有人可以告诉我如何设置它,以便class_exists返回true。

1 个答案:

答案 0 :(得分:4)

use仅建立一个别名,因此您可以使用较短的名称来引用类名。完全限定的类名是AppBundle\Components\model\Customer; use语句允许您只使用Customer来引用它。

但是 ,在使用字符串引用类时,您始终需要使用完全限定的类名。使用use建立的别名不适用于字符串,因为它们不会绑定到use语句的词法范围,因此无法可靠地解决它们。

这有效:

class_exists('AppBundle\Components\model\Customer')