PHP如何在类的主体中包含代码,但不包含函数

问题描述:

我有一个Symfony2控制器,我想在其中包含一个包含常用函数的文件。但是,当我使用require语句时,我收到一个错误,说明需求是意外的。另外,在PHPStorm中,我还得到一个错误,说只有函数可以在我有我的require语句的地方声明。PHP如何在类的主体中包含代码,但不包含函数

这里是我的代码的概述:

<?php 
namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Session\Session; 
use Symfony\Component\HttpFoundation\Response; 
use ReCaptcha\ReCaptcha; 

class MyController extends Controller { 

    private $salt_length = 10; 

    private $resources; 
    private $request; 
    private $session; 
    private $message; 
    private $loggedin; 

    /** 
    * @Route("/My/home") 
    */ 
    // 
    // My home page 
    // 
    public function homeAction() { 

     // bla bla 

    } 

    require 'utilities.php'; // <<============== 

} 
?> 

的需要,我的成绩结束产生编译错误。

我宁愿不创建另一个包和'使用'它,因为我希望当调用utility.php中的函数时MyController类的作用域有效。

是否有另一个预处理器指令,包含另一个文件的内容来实现我想要做的事情?

奇怪的是,当我查找包括和需要PHP手册和w3schools PHP页面似乎说,你可以使用包含/要求做我正在试图做的。

非常感谢您提供任何帮助的人可以给我这个。

您可以在类定义之外放置任何想要的代码,并在类加载时运行。如果你想包含没有状态的非类相关的帮助类型函数,我更喜欢创建一个类的静态帮助函数而不是全局函数。

要注意:

  • 如果里面utilities.php是一个实际的一个或多个类,做正确的事,并registier自动加载磁带机来代替。
  • 使用require_once而不是require

它的混乱,我不建议这样做,但:

<?php 
    namespace AppBundle\Controller; 

    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
    use Symfony\Component\HttpFoundation\Session\Session; 
    use Symfony\Component\HttpFoundation\Response; 
    use ReCaptcha\ReCaptcha; 

    require_once 'utilities.php'; // <<============== 

    class MyController extends Controller { 

     .... 

什么,你可能会寻找的特质:

http://php.net/manual/en/language.oop5.traits.php

使用特征允许您为班级加载其他功能。

<?php 

namespace AppBundle\Traits; 

trait UtilityTrait { 
    public function doStuff() { 
     return 'stuff'; 
    } 
} 
?> 

<?php 

namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Session\Session; 
use Symfony\Component\HttpFoundation\Response; 
use ReCaptcha\ReCaptcha; 
use AppBundle\Traits\UtilityTrait; 

class MyController extends Controller { 
    use UtilityTrait; 

    .... 
}