Php 将应用程序对象传递给Laravel中的函数/类

Php 将应用程序对象传递给Laravel中的函数/类,php,laravel,laravel-4,facade,Php,Laravel,Laravel 4,Facade,我正在使用Laravel4.2,调用表单提交和控制器响应之间的支付流。如果支付被接受,一系列的工作将由类PaymentProcessor在幕后完成 use MyProject\libraries\payment\PaymentProcessor; class MyFirstController extends \Controller { protected $paymentProcessor; public function __construct( Pay

我正在使用Laravel4.2,调用表单提交和控制器响应之间的支付流。如果支付被接受,一系列的工作将由类PaymentProcessor在幕后完成

use MyProject\libraries\payment\PaymentProcessor;

class MyFirstController extends \Controller {

    protected $paymentProcessor;

    public function __construct(
        PaymentProcessor $paymentProcessor
    ) {
        $this->paymentProcessor = $paymentProcessor;
    }

    public function postFormSubmit() {
        //DO SOME STUFF
        $paymentResult = $this->paymentProcessor->makePayment($paymentDetails);
    }
}
PaymentProcessor位于不同的命名空间上,我可以使用App::make调用所需的库

<?php namespace MyProject\libraries\payment;

use MyProject\DataObjects\PaymentDetails;

class PaymentProcessor {

    public function makePayment(PaymentDetails $paymentData) {
        $doFirstStep = \App::make('amazingLibrary')->doImportantThings();
但它会导致:

FatalErrorException(E_PARSE)语法错误,意外的“::”(T_PAAMAYIM_NEKUDOTAYIM)

我这样做对吗

更新:

我也试着把它叫做:
$this->app->make

这导致:


调用undefined method Illumb\Support\Facades\App::make()

您可能想这样做:

something($app);

function something (\Illuminate\Foundation\Application  $app) {

    echo  $app->getLocale();
}

因此,在您的例子中,您需要使用
$this->app->make
语法,并且需要传递参数,如我所示(并且$app是
\illumb\Foundation\Application
的实例,而不是
\app

注释掉私有app属性。我想查看下一个结果结果相同
$this->app::make()
是无效代码。使用
::
时,必须使用该方法所属的类的名称对其进行限定(例如
SomeClass::make()
。这是一个坏主意-您试图将整个应用程序注入到您的小模块中-考虑、阅读
SOLID
、spe
依赖项注入
并重新设计。对于
::
-正确的方法是
$This->app->make
,因为您已经实例化了这个对象,
是名称空间(范围)解析运算符,因此您可以使用它来指示您希望使用的(静态)方法/属性。@AndréTeixeira这可能是因为您的问题标题。我已经更改了它,并将此问题指定为重新讨论。仅此而已!仍然不确定它是否是最佳方法,但现在可以评估这两种解决方案。
    public function makePayment(PaymentDetails $paymentData) {
        $doFirstStep = $this->app::make('amazingLibrary')->doImportantThings();
something($app);

function something (\Illuminate\Foundation\Application  $app) {

    echo  $app->getLocale();
}