2012-07-10 15 views
13

私はデータベースに支払いレコードを挿入する小さなクラスがあります。以下の通りである:私はなぜエラーが発生していることを混乱していますなぜ静的関数に致命的なエラーが表示される

<?php 

class pay{ 
     public static function pay($user, $income, $type, $refid='--'){ 
     mysql_query("INSERT INTO earn VALUES (NULL, '$user', '$income', '$refid', '$type', ".time().")"); 
     } 
    } 

?> 

しかし、ブラウザは致命的なエラーの下になります。..

Fatal error: Constructor pay::pay() cannot be static in F:\xampp\htdocs\new\sts\class.php on line 41

...私が理解する助けてください。

答えて

28

クラスの名前と同じメソッド名がある場合、それはコンストラクタと見なされます。コンストラクターを静的にすることはできません。このクラスまたはメソッドの名前を変更するか、メソッドでなく静的にし、使用する場合はそのクラスのインスタンスを作成する必要があります。

9

PHP 5では、コンストラクタは__constructと呼ばれます。 PHP 4では、これはクラスの名前でした。 function payclass payです。 PHP 5はPHP 4と下位互換性があるため、動作します。コンストラクタはstaticにできません。

1

コンストラクタはオブジェクトの作成時に呼び出されるため、静的にすることはできません。クラスと同じ名前の関数を指定すると、phpはそれをコンストラクタにしたいと考えます。

1

名前が定義されているクラスと同じ名前のメソッドは、通常のメソッドではなく、コンストラクタです。クラスの新しいインスタンスを作成します。コンストラクターは静的にすることはできません。なぜなら、それらの全体が新しく作成されたクラスインスタンスに作用するからです。