gpt4 book ai didi

php - 抽象特征方法在 PHP 中不允许是静态的?

转载 作者:可可西里 更新时间:2023-11-01 13:41:16 24 4
gpt4 key购买 nike

这是我的例子:

trait FileConfig {
public static function getPathForUploads() {
$paths = static::getPaths();
//etc.
}

abstract public static function getPaths(); //doesn't work. Error: "Static function SharedDefaultConfig::getPaths() should not be abstract"

abstract public function getPaths(); //OK
public static function getPaths() {} //OK
}

类:

class AppConfig {
use FileConfig;

public static function getPaths() {
return array(...);
}
}

调用:

AppConfig::getPathForUploads();

必须使其静态和抽象(以强制使用 FileConfig 的类来实现 getPaths)。

我想知道如何实现改变它的 static 属性的方法?这是一个好的做法还是有更好的解决方案?有一天它会成为非法的吗?

谢谢

最佳答案

这在 php 7 中已修复,因此以下代码有效:

<?php

error_reporting(-1);

trait FileConfig {
public static function getPathForUploads() {
echo static::getPaths();
}

abstract static function getPaths();
}

class AppConfig {
use FileConfig;

protected static function getPaths() {
return "hello world";
}
}

AppConfig::getPathForUploads();

http://sandbox.onlinephpfunctions.com/code/610f3140b056f3c3e8defb84e6b57ae61fbafbc9

但是在编译的时候并没有真正检查AppConfig中的方法是否是静态的。只有当您尝试静态调用非静态方法时才会收到警告:http://sandbox.onlinephpfunctions.com/code/1252f81af34f71e901994af2531104d70024a685

关于php - 抽象特征方法在 PHP 中不允许是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27922854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com