Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用->;具有静态功能_Php - Fatal编程技术网

Php 使用->;具有静态功能

Php 使用->;具有静态功能,php,Php,嗨,我是一个OOP新手,我有一个简单的问题:假设我在一个声明为 class House { public static function hasAlcohol() { // Do Something } } 我知道我可以称之为 House::hasAlcohol() 但是,我还想知道编码标准和PHP是否可以,例如,从house实例调用hasAlcool()是否没有错误(我尝试过,没有错误) $house = new House(); $house-&

嗨,我是一个OOP新手,我有一个简单的问题:假设我在一个声明为

class House
{
    public static function hasAlcohol() 
    {
        // Do Something
    }
}
我知道我可以称之为

House::hasAlcohol()
但是,我还想知道编码标准和PHP是否可以,例如,从house实例调用hasAlcool()是否没有错误(我尝试过,没有错误)

$house = new House();
$house->hasAlcohol();

因为这在过去给我带来了一些问题:是的,它是有效的代码。你应该这样做吗。它给人的印象是调用是非静态的,很可能会给以后处理代码的人带来痛苦。没有理由使代码模棱两可


这以前是可能的,但是如果我没记错的话,最新版本的PHP会抛出一个错误。您应该静态地调用静态函数。您可以执行
$house::HasAlcool()

因为这在过去给我带来了几个问题:是的,这是有效的代码。你应该这样做吗。它给人的印象是调用是非静态的,很可能会给以后处理代码的人带来痛苦。没有理由使代码模棱两可


这以前是可能的,但是如果我没记错的话,最新版本的PHP会抛出一个错误。您应该静态地调用静态函数。您可以执行
$house::hasalool()

这以前是可能的,但是如果我没记错的话,最新版本的PHP会抛出一个错误。您应该静态地调用静态函数。不过,你可以做
$house::hasaolcool()


另一方面,酒精是否应该是静态的?从名称来看,它应该是一个实例方法。

这以前是可能的,但是如果我没记错的话,最新版本的PHP会抛出一个错误。您应该静态地调用静态函数。不过,你可以做
$house::hasaolcool()


另一方面,酒精是否应该是静态的?从名称来看,它应该是一个实例方法。

如果您需要对一个方法进行持续访问,则更推荐的模式是使用静态构造函数并将实例(即使它是“空白”或“空”)实例获取到该类。因此,在您展示的示例中,最好使用如下方法:

class House
{
    public function instance()
    {
        return new House; 
    }

    public function hasAlcohol() 
    {
        // Do Something
    }
}
然后,如果您需要调用“hasalcolution()”,而不需要任何其他用途的实例,您可以这样做:

House::instance()->hasAlcohol();
或者您可以像示例中那样实例化它:

$house = new House;
$house->hasAlcohol();
或者,最好使用新的工厂方法:

$house = House::instance();
$house->hasAlcohol();

如果您需要对某个方法进行持续访问,则更推荐的模式是使用静态构造函数并获取该类的实例(即使它是“blank”或“empty”)。因此,在您展示的示例中,最好使用如下方法:

class House
{
    public function instance()
    {
        return new House; 
    }

    public function hasAlcohol() 
    {
        // Do Something
    }
}
然后,如果您需要调用“hasalcolution()”,而不需要任何其他用途的实例,您可以这样做:

House::instance()->hasAlcohol();
或者您可以像示例中那样实例化它:

$house = new House;
$house->hasAlcohol();
或者,最好使用新的工厂方法:

$house = House::instance();
$house->hasAlcohol();


那是设计拙劣的标志。如果函数是静态的,您不应该这样做。检查,这看起来像是同一个问题。您始终可以创建一次性脚本来测试它。你知道,自己输入并执行它是学习编程的更好方法Hey silent,我试过了,它很有效,但我只是想知道它是否是好的编码实践,每个人都说不是。这就是在这里发布的全部想法。谢谢,这是设计拙劣的表现。如果函数是静态的,您不应该这样做。检查,这看起来像是同一个问题。您始终可以创建一次性脚本来测试它。你知道,自己输入并执行它是学习编程的更好方法Hey silent,我试过了,它很有效,但我只是想知道它是否是好的编码实践,每个人都说不是。这就是在这里发布的全部想法。谢谢,非常感谢。我刚才使用了一个假设函数hasaolcool(),哈哈。显然每个房子都有酒精,因此:
公共静态函数hasaolcool(){return true;}
@Andrew true,我想真正的逻辑应该在
公共函数shouldlhaveolcool(){return'*cough*dependens*cough*';}
中。谢谢。我刚才使用了一个假设函数hasaolume(),lol。显然每个房子都有酒精,因此:
公共静态函数hasaolume(){return true;}
@Andrew true,我想真正的逻辑应该是在
公共函数shouldlhaveolume(){return'*cough*dependens*cough*';}
那么,对不起,我看不出这与
House::hasalcolution()
有什么不同。如果该方法作为静态方法有意义,则将其设为静态并静态调用。如果它需要一个实例,那么将其称为“一次性”是没有意义的。一个工厂,它唯一的工作就是调用
new
操作符,这似乎是多余的,特别是如果你包含它的唯一原因是能够调用一个“静态”方法作为实例方法。对不起,我可能做出了一个错误的假设,即该方法需要作为实例方法运行。静态版本将无法访问实例属性。在给定的示例中,我假设该类是否可以/应该实例化(例如,您可能有多个房子,并且该房子可能有酒精,也可能没有酒精)。我意识到我可能回答了一个问题,而不是特别问的问题。嘿,伙计们,谢谢,所有的答案对我来说都很有教育意义,谢谢。我学到了很多对不起,我看不出这比
House::hasaolcool()
有什么更好或不同。如果该方法作为静态方法有意义,则将其设为静态并静态调用。如果它需要一个实例,那么将其称为“一次性”是没有意义的。一家工厂的唯一工作就是给新的操作员打电话,这家工厂看起来很不错