【问题标题】:Can a property of an Abstract Class be access outside the class?抽象类的属性可以在类外访问吗?
【发布时间】:2017-07-12 19:29:19
【问题描述】:

可以访问 PHP 抽象类中的变量,即

abstract class Settings
{
    public $application = array
    (
        'Name' => 'MyApp',
        'Version' => '1.0.0',
        'Date' => 'June 1, 2017'
    )
}

echo Settings::application ['Name'];   // doesn't work

【问题讨论】:

  • 不知道为什么您因提出有效问题而被否决。

标签: php properties abstract-class


【解决方案1】:

您可以创建变量static,只要它不需要允许跨实例区分(即实例变量):

<?php
// example code

abstract class Settings
{
    public static $application = array
    (
        'Name' => 'MyApp',
        'Version' => '1.0.0',
        'Date' => 'June 1, 2017'
    );
}

echo Settings::$application ['Name'];

this playground example 中运行它。

虽然您对application 的原始访问权限与常量的访问权限相似。使用const 声明Class constant

abstract class Settings
{
    const application = array
    (
        'Name' => 'MyApp',
        'Version' => '1.0.0',
        'Date' => 'June 1, 2017'
    );
}

echo Settings::application ['Name'];

this playground example 中运行它。

【讨论】:

  • 谢谢。我更喜欢第二种解决方案。我正在使用它来替换用于存储 Web 应用程序设置的 XML 文件。我可以使用常规类,但我不想实例化它只是为了检索变量。
【解决方案2】:

抽象类不能直接实例化,因为它们依赖于 子类来完全实现功能。

因此,如果您想检查您的变量,我会创建新类并从您的 Settings 类继承。 无论如何你都必须使用继承。

class MySettings extends Settings
{
  ....
}

$mySettings = new MySettings();
echo $mySettings->application['Name'];

更多关于抽象类http://culttt.com/2014/03/26/abstract-classes/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2011-11-03
  • 2013-09-18
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多