当前位置: 首页 > 面试题库 >

是否可以在PHP中创建静态类(例如在C#中)?

陈实
2023-03-14
问题内容

我想在PHP中创建一个静态类,并使其行为像在C#中一样,所以

  1. 在第一次调用类时会自动调用构造函数
  2. 无需实例化

这种东西…

static class Hello {
    private static $greeting = 'Hello';

    private __construct() {
        $greeting .= ' There!';
    }

    public static greet(){
        echo $greeting;
    }
}

Hello::greet(); // Hello There!

问题答案:

您可以在PHP中拥有静态类,但它们不会自动调用构造函数(如果尝试调用self::__construct(),则会收到错误)。

因此,您必须创建一个initialize()函数并在每个方法中调用它:

<?php

class Hello
{
    private static $greeting = 'Hello';
    private static $initialized = false;

    private static function initialize()
    {
        if (self::$initialized)
            return;

        self::$greeting .= ' There!';
        self::$initialized = true;
    }

    public static function greet()
    {
        self::initialize();
        echo self::$greeting;
    }
}

Hello::greet(); // Hello There!


?>


 类似资料:
  • 问题内容: 让我们考虑以下情况。有一个,有一个。子窗格将添加到父窗格。考虑到可以动态地添加和删除子窗格而没有任何限制和顺序的情况下,如何才能仅在可见子窗格的情况下使parentPane可见。当然childPane的可见状态也可以随时更改。是否可以创建动态Bindings.OR,以便我可以动态向其添加/删除子可见属性?如果是,那怎么办?如果没有,那么在这种情况下使用什么解决方案? 问题答案: 您可以

  • 问题内容: 如何在Python中使类或方法抽象? 我尝试像这样重新定义: 但是现在,如果我创建一个像这样继承的类: 那么我也无法实例化,因为它调用了其超类的方法。 有没有更好的方法来定义抽象类? 问题答案: 使用该模块创建抽象类。使用装饰器来声明方法摘要,并根据您的Python版本使用以下三种方式之一声明类摘要。 在Python 3.4及更高版本中,您可以从继承。在Python的早期版本中,您需要

  • 问题内容: 我在基类中定义了一个静态方法,我想在其子类中重写此方法,这可能吗? 我尝试了一下,但是没有按预期工作。当我创建类B的实例并调用其callMe()方法时,将调用类A中的静态foo()方法。 问题答案: 静态方法调用在编译时解决(不动态分配)。 给

  • 问题内容: 有没有办法动态创建所有实例属性?例如,我想能够产生在构造函数中的所有属性,仍然能够访问它们的类实例化这样的后:。注意,我想单独访问属性,而不是使用数组。这是我 不 想要的例子: 更具体地说,当我处理具有大量属性的类时,我希望能够选择数据库中的所有列(代表属性)并从中创建实例属性。每个列值应存储在单独的实例属性中。 问题答案: 有点。有一些魔术方法可以让您连接自己的代码以在运行时实现类行

  • 问题内容: 例如,在Java中,我可能有一个类,并且有一个名为的静态方法,因此我可以执行以下操作: 我该如何在目标C中做类似的事情? 非常感谢 问题答案: 在Objective-C中,您将此称为“类方法”,请参见此处: 该 + 是最重要的事情; 您可以这样调用方法:

  • 问题内容: 是否可以定义PHP类的属性并使用同一类中的属性动态分配值?就像是: 产量: 解析错误:语法错误,第6行出现意外的’$ this’(T_VARIABLE) 上面的代码有什么问题吗?如果是这样,请指导我,如果不可能,那么实现此目的的最佳方法是什么? 问题答案: 您可以像这样将其放入构造函数中: 您为什么不能按照自己的方式去做?手册中的引言对此进行了解释: 该声明可以包括一个初始化,但是此