Php 在锂电池中实现我自己的实用功能?

Php 在锂电池中实现我自己的实用功能?,php,oop,model-view-controller,web,lithium,Php,Oop,Model View Controller,Web,Lithium,我是锂PHP的新手,了解锂的基本知识。我想实现自己的实用程序功能。我已经创建了与app\controllers并行的utilities文件夹。我的班级是这样的: <?php namespace app\utilities; class UtilityFunctions { protected $_items = array( 'a' => 'Apple', 'b' => 'Ball', 'c'

我是锂PHP的新手,了解锂的基本知识。我想实现自己的
实用程序
功能。我已经创建了与
app\controllers
并行的
utilities
文件夹。我的班级是这样的:

<?php

namespace app\utilities;

class UtilityFunctions {
    protected $_items = array(
            'a' => 'Apple',
            'b' => 'Ball',
            'c' => 'Cat'
        );

    //I get _items as undefined here, blame my poor OOP skills.
    public function getItem(alphabet) {
        return $this->_items[alphabet];
    }
}

?>

我在控制器中使用它作为:

<?php

namespace app\controllers;

use \app\utilities\UtilityFunctions;

class MyController extends \lithium\action\Controller {
    public function index() {
        $args = func_get_args();
        $item = UtilityFunctions::getItem($args[0]);

        return compact('item');
    }
}

?>

这样做对吗?我的实用程序类需要扩展什么吗?还是锂提供了其他的方法来实现这一点


此外,我无法在我的
getItems
方法中访问受保护变量
$\u items
。我在我的控制器中实现了同样的功能,它当时运行得很好。

这是一个很好的方法。有两个核心锂类可以扩展:和

我认为这对于您的用例来说是不必要的

无法访问受保护变量的原因是静态调用该方法。您可能应该重写类以使用静态变量和方法。另外,我假设这只是一个输入错误,为StackOverflow创建了一个示例,但是您忘记了
getItem
方法中
alphabet
var的
$

<?php

namespace app\utilities;

class UtilityFunctions {
    protected static $_items = array(
        'a' => 'Apple',
        'b' => 'Ball',
        'c' => 'Cat'
    );

    public static function getItem($alphabet) {
        return static::_items[$alphabet];
    }
}

?>

另一个选项是不更改UtilityFunctions类,而是在控制器中实例化该类:

<?php

namespace app\controllers;

use app\utilities\UtilityFunctions;

class MyController extends \lithium\action\Controller {
    public function index() {
        $args = func_get_args();
        $utilities = new UtilityFunctions();
        $item = $utilities->getItem($args[0]);

        return compact('item');
    }
}

?>

对于这样一个简单的情况,类不需要保存任何状态,我建议使用静态方法。查看一下,了解更多关于static关键字的信息


另一个小提示是,在
use
语句中不需要前导反斜杠。

这是一个很好的方法。有两个核心锂类可以扩展:和

我认为这对于您的用例来说是不必要的

无法访问受保护变量的原因是静态调用该方法。您可能应该重写类以使用静态变量和方法。另外,我假设这只是一个输入错误,为StackOverflow创建了一个示例,但是您忘记了
getItem
方法中
alphabet
var的
$

<?php

namespace app\utilities;

class UtilityFunctions {
    protected static $_items = array(
        'a' => 'Apple',
        'b' => 'Ball',
        'c' => 'Cat'
    );

    public static function getItem($alphabet) {
        return static::_items[$alphabet];
    }
}

?>

另一个选项是不更改UtilityFunctions类,而是在控制器中实例化该类:

<?php

namespace app\controllers;

use app\utilities\UtilityFunctions;

class MyController extends \lithium\action\Controller {
    public function index() {
        $args = func_get_args();
        $utilities = new UtilityFunctions();
        $item = $utilities->getItem($args[0]);

        return compact('item');
    }
}

?>

对于这样一个简单的情况,类不需要保存任何状态,我建议使用静态方法。查看一下,了解更多关于static关键字的信息


另一个小注意,你不需要在你的代码>使用< < /Cult>语句> .p/>。你可以用li3中的过滤器做一些很酷的事情。同时,考虑使用PHP特性作为您的用例。谢谢RMaScHER和@ HOSNNI。这是一个打字错误,最近做了很多JavaScript,因此忘记了$sign。我按照第二种方法实例化了这个类。我将阅读更多关于静态关键字。只要添加到RMaScHER所说的,“Rutwitkangurd-你应该考虑从StistCoBobe和对象扩展为RMARCHER指出。你可以用li3中的过滤器做一些很酷的事情。同时,考虑使用PHP特性作为您的用例。谢谢RMaScHER和@ HOSNNI。这是一个打字错误,最近做了很多JavaScript,因此忘记了$sign。我按照第二种方法实例化了这个类。我将阅读更多关于静态关键字的内容。