我刚刚开始使用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 [] []
如您所见,我正在同时执行use
和include_once
。
但似乎我可以创建一个实例,但class_exists
返回false
对我来说,这似乎是一个矛盾。有人可以告诉我如何设置它,以便class_exists
返回true。
答案 0 :(得分:4)
use
仅建立一个别名,因此您可以使用较短的名称来引用类名。完全限定的类名是AppBundle\Components\model\Customer
; use
语句允许您只使用Customer
来引用它。
但是 ,在使用字符串引用类时,您始终需要使用完全限定的类名。使用use
建立的别名不适用于字符串,因为它们不会绑定到use
语句的词法范围,因此无法可靠地解决它们。
这有效:
class_exists('AppBundle\Components\model\Customer')