2012-03-27 13 views
0

OOP PHPのグリップに慣れていて、わかりましたが、finalキーワードに問題があります。 Finalは、サブクラスのメソッドを停止し、スーパークラスのメソッドをオーバーライドします。下に私はそれを試して、私のIDEはいくつかのエラーを示していると動作しません。私は見て見ましたが、この本は、これはサブクラスではなくスーパークラスメソッドを呼び出すべきだと言います。最終的なメソッドのサブクラスメソッドを定義する際のエラー

$object=new userprofile(); 
$object->name="Mike"; 
$object->age=22; 
$object->sex="Male"; 

//2 properties of subclass 
$object->email="[email protected]"; 
$object->website="http://domain.com"; 

echo $object->get_name(); //method call 

class user{ 
    public $name, $age, $sex; 

    final function get_name(){ 
     return "Not overriden"; 
    } 
} 

class userprofile extends user{ 
    public $email,$website; 

    function get_name(){ 
     return $this->website; 
    } 
} 
+1

スクリプトを実行すると、どのようなエラーが発生しますか? – JJJ

+0

こんにちは、Juhana ..致命的なエラー:41行目のH:\ xampp \ htdocs \ PHP_testers \ objects_OOP \ object_inheritence.phpのfinalメソッドuser :: get_name()をオーバーライドできません –

答えて

1

エラーメッセージには、タグ付けされた最後のメソッドをオーバーライドするメソッドを定義することはできません。あなたは試してみることさえ許されません(新しい方法は効果がないので、あなたはなぜでしょう?)。

documentation for the final keywordも参照してください(これは最初の例で説明しています)。

1

あなた自身のように聞こえます。基本クラスにfinalキーワードを定義することで、子クラスでそれを上書きすることはできません。それを無効にするには、finalキーワードを削除してください。

+0

これは、子クラス( 'userprofile' )は 'final'キーワードが付いた親(' user')メソッドをオーバーライドできません。これは、親クラスが子クラスがオーバーライドできるかどうかを制御するために使用されます。メソッドをサブクラスから完全に削除すると、親クラスのメソッドが呼び出されます。 – jeremyharris

関連する問題