如何解决 php 中没有数组作为类常量的问题?

发布于 2024-09-02 03:49:11 字数 148 浏览 3 评论 0原文

我有一个带有静态方法的类。有一个数组用于检查传递的字符串参数是否是集合的成员。但是,使用静态方法,我无法在未实例化的类中引用类属性,也无法将数组作为类常量。

我想我可以在静态方法中对数组进行硬编码,但是如果我需要更改它,我必须记住在两个地方更改它。我想避免这种情况。

I have a class with a static method. There is an array to check that a string argument passed is a member of a set. But, with the static method, I can't reference the class property in an uninstantiated class, nor can I have an array as a class constant.

I suppose I could hard code the array in the static method, but then if I need to change it, I'd have to remember to change it in two places. I'd like to avoid this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

Hello爱情风 2024-09-09 03:49:12

您可以创建一个私有静态函数,它将根据需要创建数组并返回它:

class YourClass {
    private static $values = NULL;
    private static function values() {
        if (self::$values === NULL) {
            self::$values = array(
                'value1',
                'value2',
                'value3',
            );
        }
        return self::$values;
    }
}

You can create a private static function that will create the array on demand and return it:

class YourClass {
    private static $values = NULL;
    private static function values() {
        if (self::$values === NULL) {
            self::$values = array(
                'value1',
                'value2',
                'value3',
            );
        }
        return self::$values;
    }
}
回忆追雨的时光 2024-09-09 03:49:12

我将数组放入另一个文件中,然后在需要的地方包含该文件。

I put arrays in another file and then include the file wherever I need it.

一生独一 2024-09-09 03:49:12

我真的很难理解你的问题。这基本上是我的理解:

我需要维护一个适当的集合,其中
没有两个元素是相同的。

PHP 没有固定类型,甚至在 SPL 中也没有!我们可以模拟集合的功能,但我能想到的任何解决方案都不是令人愉快的。这是我认为最干净的:

<?php

class Set {

    private $elements = array();

    public function hasElement($ele) {
        return array_key_exists($ele, $elements);
    }

    public function addElement($ele) {
        $this->elements[$ele] = $ele;
    }

    public function removeElement($ele) {
        unset($this->elements[$ele]);
    }

    public function getElements() {
        return array_values($this->elements);
    }

    public function countElements() {
        return count($this->elements);
    }

}

示例用法:

<?php

$animals = new Set;
print_r($animals->getElments());
$animals->addElement('bear');
$animals->addElement('tiger');
print_r($animals->getElements());
$animals->addElement('chair');
$animals->removeElement('chair');
var_dump($animals->hasElement('chair'));
var_dump($animals->countElements());

I am having a really really hard time understanding your question. Here is essentially what I understood:

I need to maintain a proper set, where
no two elements are the same.

PHP does not have a set type, not even in SPL! We can emulate the functionality of a set but any solution I can think of is not pleasant. Here is what I think is the cleanest:

<?php

class Set {

    private $elements = array();

    public function hasElement($ele) {
        return array_key_exists($ele, $elements);
    }

    public function addElement($ele) {
        $this->elements[$ele] = $ele;
    }

    public function removeElement($ele) {
        unset($this->elements[$ele]);
    }

    public function getElements() {
        return array_values($this->elements);
    }

    public function countElements() {
        return count($this->elements);
    }

}

Example usage:

<?php

$animals = new Set;
print_r($animals->getElments());
$animals->addElement('bear');
$animals->addElement('tiger');
print_r($animals->getElements());
$animals->addElement('chair');
$animals->removeElement('chair');
var_dump($animals->hasElement('chair'));
var_dump($animals->countElements());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文