Php 抽象助手类

Php 抽象助手类,php,abstract-class,Php,Abstract Class,我创建了一个助手类: abstract class Format{ public static function format_array_id_value($result){ $array = []; foreach($result as $val){ extract($val); $array[$id] = urldecode($val); } return $array;

我创建了一个助手类:

abstract class Format{
    public static function format_array_id_value($result){
        $array = [];
        foreach($result as $val){
            extract($val);
            $array[$id] = urldecode($val);
        }
        return $array;
    }

}
我在申请开始时需要包含文件。我试图从另一个类方法调用它,作为Format::Format\u array\u id\u value($result)。我收到错误“致命错误:在第22行的Expense.php中找不到类'Format'

我没有正确地考虑抽象类吗?我必须实例化这个类才能使用这个helper方法吗


谢谢。:)

Daniela,没有理由将其用作抽象类,这不是它的目的

如上所述

不能实例化定义为抽象的类,任何包含至少一个抽象方法的类也必须是抽象的。定义为抽象的方法只是声明方法的签名——它们不能定义实现

相反,请使用公共类


最后,我发现autoloader没有正确配置,因此没有加载抽象格式类。虽然我仍然不确定为什么手动要求该文件不起作用,但修复自动加载器确实解决了这个问题。现在进入下一组错误


感谢各位的意见。:)

:定义为抽象的类无法实例化,这意味着您应该使用它扩展非抽象类。在您的情况下,没有理由将其定义为抽象。另外,请确保您的要求是正确的。告诉我们您如何要求
Format.php
file@biesior它是一个静态方法,因此不需要实例化它的类。抽象类可以容纳一堆静态助手方法(这可能是一个设计问题,但这是另一个讨论)。@Jeto-from
“定义为抽象的方法只声明方法的签名-它们无法定义实现。”
上面是什么doing@DaniellaIsabella您是否使用任何类自动加载?如果没有,您是否包含包含此类定义的文件?同样,我必须不同意。使这个类抽象是完全有意义的,因为它根本没有状态,只包含静态方法(这里只有一个,但在实际情况中可能有多个)。实例化它不会做任何事情,因此为什么将它抽象是合适的。另外,一个带有
私有
构造函数的
final
类可能更好,因为它清楚地表达了不可实例化但也不可扩展类的含义。在任何情况下,OP的问题都很可能与此无关,而只是与类本身的适当加载有关。虽然它是可能的并且完全有效,但使用
abstract
关键字并不是为了这个目的。抽象类的第一个含义是它不能被实例化。作为静态助手函数容器的类不应该被实例化,因此它会删除该选项(即使
final
+private构造函数选项更切题)。不管怎样,我想是意见。这是一个副作用。第一个含义是抽象类可以扩展,子类应该实现抽象方法。我们可以用参数交换到早上,请检查我的编辑以了解如何使用抽象类。
MyClass::myStaticMethod();
$obj = new MyClass();
$obj->myNonStaticMethod();
<?php
require_once('autoloader.php');
print_r(\Your\Namespace\FormatHelper::formatArrayIdValue(['foo bar baz'], 'foo');
print_r(\Other\Namespace\OtherHelper::format('foo');
print_r(\Quite\Other\Something\SomeHelper::someMethod());