3
class me {
   private $name;
   public function __construct($name) { $this->name = $name; }
   public function work() {
       return "You are working as ". $this->name;
   }
   public static function work() {
       return "You are working anonymously"; 
   } 
}

$new = new me();
me::work();

致命的なエラー: me::work() を再宣言できません

問題は、php がこのような再宣言を許可しない理由です。回避策はありますか?

4

2 に答える 2

7

実際に、魔法のメソッドの作成を使用してこれを回避する方法があります。

__callアクセスできないメソッドがオブジェクト スコープで呼び出されると、内部的にトリガーされます。

__callStaticアクセスできないメソッドが静的スコープで呼び出されると、内部的にトリガーされます。

<?php

class Test
{
    public function __call($name, $args)
    {
        echo 'called '.$name.' in object context\n';
    }

    public static function __callStatic($name, $args)
    {
        echo 'called '.$name.' in static context\n';
    }
}

$o = new Test;
$o->doThis('object');

Test::doThis('static');

?>
于 2011-05-03T01:35:41.880 に答える
-2

代わりにそれを行うべきだと思う方法は次のとおりです。

class me {
   private $name;

   public function __construct($name = null) { 
       $this->name = $name; 
   }

   public function work() {
       if ($this->name === null) {
           return "You are working anonymously"; 
       }
       return "You are working as ". $this->name;
   }
}

$me = new me();
$me->work(); // anonymous

$me = new me('foo');
$me->work(); // foo
于 2011-05-03T01:32:54.270 に答える