Is it possible to declare a method static and nonstatic in PHP?

后端 未结 5 1471
北荒
北荒 2020-12-01 09:04

Can I declare a method in an object as both a static and non-static method with the same name that calls the static method?

I want to create a class that has a stati

5条回答
  •  南笙
    南笙 (楼主)
    2020-12-01 09:15

    You can do this, but it's a bit tricky. You have to do it with overloading: the __call and __callStatic magic methods.

    class test {
        private $text;
        public static function instance() {
            return new test();
        }
    
        public function setText($text) {
            $this->text = $text;
            return $this;
        }
    
        public function sendObject() {
            self::send($this->text);
        }
    
        public static function sendText($text) {
            // send something
        }
    
        public function __call($name, $arguments) {
            if ($name === 'send') {
                call_user_func(array($this, 'sendObject'));
            }
        }
    
        public static function __callStatic($name, $arguments) {
            if ($name === 'send') {
                call_user_func(array('test', 'sendText'), $arguments[0]);
            }
        }
    }
    

    This isn't an ideal solution, as it makes your code harder to follow, but it will work, provided you have PHP >= 5.3.

提交回复
热议问题