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

在PHP中链接静态方法?

秦德海
2023-03-14
问题内容

是否可以使用静态类将静态方法链接在一起?说我想做这样的事情:

$value = TestClass::toValue(5)::add(3)::subtract(2)::add(8)::result();

。。。并且显然我希望将$ value分配给数字14。这可能吗?

更新 :它不起作用(您不能返回“自我”-它不是实例!),但这就是我的想法带给我的地方:

class TestClass {
    public static $currentValue;

    public static function toValue($value) {
        self::$currentValue = $value;
    }

    public static function add($value) {
        self::$currentValue = self::$currentValue + $value;
        return self;
    }

    public static function subtract($value) {
        self::$currentValue = self::$currentValue - $value;
        return self;
    }

    public static function result() {
        return self::$value;
    }
}

解决了这些问题之后,我认为仅使用类实例而不是尝试链接静态函数调用(这似乎不太可能,除非可以对上述示例进行一些调整)才有意义。


问题答案:

我喜欢上面Camilo提供的解决方案,基本上是因为您要做的只是更改静态成员的值,并且因为您确实想要链接(即使它只是句法糖),所以实例化TestClass可能是最好的方法。

如果您想限制类的实例化,我建议使用Singleton模式:

class TestClass
{   
    public static $currentValue;

    private static $_instance = null;

    private function __construct () { }

    public static function getInstance ()
    {
        if (self::$_instance === null) {
            self::$_instance = new self;
        }

        return self::$_instance;
    }

    public function toValue($value) {
        self::$currentValue = $value;
        return $this;
    }

    public function add($value) {
        self::$currentValue = self::$currentValue + $value;
        return $this;
    }

    public function subtract($value) {
        self::$currentValue = self::$currentValue - $value;
        return $this;
    }

    public function result() {
        return self::$currentValue;
    }
}

// Example Usage:
$result = TestClass::getInstance ()
    ->toValue(5)
    ->add(3)
    ->subtract(2)
    ->add(8)
    ->result();


 类似资料:
  • 问题内容: 我有一个Go库,它为C ++ OpenImageIO库(OpenImageiGO)提供绑定。我一直在通过与libOpenImageIO的标准动态链接来构建绑定,但现在尝试静态链接。我遇到了一个问题,无论我尝试使用哪种标志组合,外部链接器都会失败,并出现大量“未定义的引用”错误。我似乎回想起过去曾提到过的这个问题,他说链接器看到符号的顺序存在问题。但我似乎再也找不到此信息。 这是我最近一

  • 静态链接方法:静态链接的时候,载入代码就会把程序会用到的动态代码或动态代码的地址确定下来 静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库 动态链接方法:使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这

  • 在编译Linux程序时,我们经常会看到动态链接和静态链接这两个术语。这两个术语中是我Linux的共享函数库(shared libraries)相关的。共享函数库就象Windows系统里的.dll文件,它里面包含有很多程序常用的函数。为了方便程序开发和减少程序的冗余,程序当中就不用包含每个常用函数的拷贝,只是在需要时调用系统中共享函数库中常函数功能即可。这种方式我们称之为动态链接(Dynamical

  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti

  • 问题内容: 我在Linux,GCC中使用Boost库。安装和构建Boost之后,我发现使用Regex和Thread的程序使用共享的Boost库。就我的目的而言,我需要静态链接。如何更改链接类型?我应该重新构建Boost,还是可以通过在自己的项目或Boost配置文件中定义一些常量来设置链接类型? 问题答案: 只需添加到您的构建调用即可。这是一个简单的示例会话: 请注意,静态二进制文件的大小为1.5m

  • 本文向大家介绍PHP中的方法链接,包括了PHP中的方法链接的使用技巧和注意事项,需要的朋友参考一下 示例 方法链接是Martin Fowler的《领域特定语言》一书中介绍的一种技术。方法链接总结为 使修饰符方法返回宿主对象,以便可以在单个表达式中调用多个修饰符。 看这段非链接/常规代码(从上述书籍中移植到PHP) 通过方法链接,您可以以更紧凑的方式编写上述语句: 为此,您所需要做的就是使用要链接r