提问者:小点点

PHP:在类处理私人和公共功能


我有一个php文件,其中包含一个类和一个私有函数。

oldfile.php

class oldClass {
    private function functionTest(){
        // This is the function I need
    }
}

我需要这个函数作为另一个类中的公共函数。

我能否以某种方式将文件加载到我的新类中(例如,使用“include”),并将其他类中的“private”函数视为新类中的“public”函数?

newfile.php

class newClass {
    
    /* 
      import functionTest() from oldClass as public function in newClass ??? 
      
    */
    
    from oldfile.php import oldClass public functionTest  // ???
    // or
    from oldClass import functionTest as public           // ???
    
}

共2个答案

匿名用户

这是不可能的,类的私有方法只能在该类中使用

更多示例见https://www.php.net/manual/en/language.oop5.abstract.php

匿名用户

您可以使用反射来更改其可见性,例如:

<?php

class oldClass
{
    private function functionTest($foo)
    {
        echo 'Private functionTest() called with argument ', $foo, PHP_EOL;
    }
}

class newClass
{
    public function functionTest($foo)
    {
        $method = new ReflectionMethod(oldClass::class, 'functionTest');
        $method->setAccessible(true);
        return $method->invoke(new oldClass(), $foo);
    }
}

$foo = new newClass();
$foo->functionTest('Blah');

您可以在类属性中缓存内容,这样就不需要每次都创建一个新的ReflectionMethod实例,但我希望您了解这个想法。

不用说,这不是在面向对象编程的正常过程中要做的事情。 这是一个黑客来处理你不能重新设计的第三方代码。