PHP5类型暗示

PHP5类型暗示,php,symfony,types,Php,Symfony,Types,我从Symfony2的书上得到了这个密码。 我对Request$Request的含义感到困惑 我知道$request是一个参数。但是我认为PHP不允许声明?原因是什么?只有newAction($request)才能以同样的方式工作吗?谢谢你的帮助!:) 那代码绝对正常。即使您删除类型提示,它也可以工作。如果您确实删除了它,尽管您无法再捕获类型错误(例如,如果您通过提供错误类型的对象来调用方法) 目前,PHP5只支持对象和数组的类型暗示,因此您可以对数组执行如下所示的操作 函数blah(数组$my

我从Symfony2的书上得到了这个密码。 我对
Request$Request
的含义感到困惑


我知道
$request
是一个参数。但是我认为PHP不允许声明?原因是什么?只有
newAction($request)
才能以同样的方式工作吗?谢谢你的帮助!:)

那代码绝对正常。即使您删除类型提示,它也可以工作。如果您确实删除了它,尽管您无法再捕获类型错误(例如,如果您通过提供错误类型的对象来调用方法)

目前,PHP5只支持对象和数组的类型暗示,因此您可以对数组执行如下所示的操作

函数blah(数组$myArray){/。。。
类型暗示也基于多态性工作,因此您的方法/函数也将接受从指定类型继承的对象

接口MyInterface{}
类MyClass实现MyInterface{}
函数blah(MyInterface$object){}//如果您同时传递MyClass的实例,则此函数也可以工作


编辑:PHP7现在也支持标量变量的类型提示:

由于php5,您可以选择添加类型提示以强制OOP类型一致性-从:“未能满足类型提示会导致可捕获的致命错误。”简言之,您绝对希望保留类型提示:
newAction(Request$Request)
因为您要扩展控制器,所以您需要维护它的功能签名-一致的接口是Symfony2的核心设计功能,如果您开始攻击它们,它会给您带来问题。这很有道理!谢谢!Symfony控制器解析器系统会检查输入参数,如果您的参数必须请求实例,然后SF自动获取“请求”来自容器的服务,并设置为输入参数。这仅适用于请求实例。我注意到问题已被标记。如果您仍在使用此版本的PHP,您应该立即进行升级。PHP 5.1多年来一直不受支持,并且存在许多已知的安全缺陷。仍然运行软件t是不安全的他的旧版本是基于生产系统的。加上PHP 5.1缺少了许多PHP开发人员今天认为理所当然的功能;大多数现代库(如Symphony)至少需要5.3才能工作,这意味着您也必须使用它们的过时版本,这意味着需要担心更多的安全缺陷和缺少的功能
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Acme\TaskBundle\Entity\Task;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    public function newAction(Request $request)
    {
        //code here
    }
}