2012-05-04 2 views
1

私は本当にシンプルなPHP/HTMLコードだと思います。私はちょうど_construct()メソッドがHTMLフォームの前に実行されていない方法を理解していません。誰かが私に説明を与えてくれますか?私のページからPHPはHTMLの前に実行されません

コード:それはどのように見えるか

<?php class register { 
     function __construct() { 
      echo 'SYSTEM: This is the register page'; 
     } 
    } 

?> 
    <form action="http://abc.org/test" method="POST"> 
    <input type="username" value=""> 
    <input type="password" value=""> 
    <input type="submit" value="Register"> 
    </form> 

How it looks

EDIT 申し訳ありませんが、元の記事でこれを含めて、私は」ではないため別のページからクラスを作成しています。

ページabc.com/aは、このコードを持っています

<?php require './'.'register'.'.php'; 
       $obj = new register; ?> 

この質問の上部にあるコードが

+0

フォームをエコーし​​た後にクラスを作成していることは明らかです。 – animuson

+0

クラスのインスタンス、つまり何かを行うオブジェクトを作成する必要があります。 $ register = new register();を追加しようとします。 – Onheiron

答えて

1

require行の後にフォームが既に出力されているため、クラスコードはフォームの後に実行されます。そのときだけ、コンストラクタがメッセージをエコーするクラスをインスタンス化します。

あなたは、あなたがそれを定義した後、フォーム、単にインスタンスの前にクラス権利をエコーする場合:

<?php 
class register { 
    function __construct() { 
     echo 'SYSTEM: This is the register page'; 
    } 
} 
$register = new register(); 
?> 
<form action="http://abc.org/test" method="POST"> 
    <input type="username" value=""> 
    <input type="password" value=""> 
    <input type="submit" value="Register"> 
</form> 
+0

もし私が 'require'をしなければ、私のページはエラーになります。それについて何をすべきですか?申し訳ありませんが、私はまだかなりphpの新しいです。エラーは次のとおりです。致命的なエラー:クラス 'register'が11行目の/public_html/index.phpに見つかりません – EGHDK

+0

私の更新を参照してください。つまり、 '$ register = new register();'はクラスを開始させるものです。クラス宣言は内部コードを一切実行せずにクラスの内容を記述するだけです。 – bfavaretto

+0

ところで、他のページでは 'require'が必要ですが、' $ obj = new register; 'は必要ありません。それはregister.phpに行きます。もう1つ:必要な文字列をすべて連結する必要はなく、 'require 'だけを使用します。./register.php'; ' – bfavaretto

4

register.phpからあなたは、クラスを定義しているが、私は表示されませんそこではそのクラス型のオブジェクトをインスタンス化します。そこインスタンス化を行いますが、ここに貼り付けたものの後に、よりコードで、それゆえ、あなたは(エコーを参照)コンストラクタが呼び出されるために

+0

私の質問が更新されました – EGHDK

1

を呼び出して、あなたはたとえば、最初のクラスをインスタンス化する必要がありますする必要があります。

$register = new register(); 

これはコンストラクタと呼ばれます。あなたがしていることはクラスを定義することですが、自動的に生きることはありません。関数と同じですが、呼び出す必要もあります。

newおよびConstructors and Destructorsを参照してください。

2

私はbfavarettoに同意し、彼のコードスニペットは、確実に動作します。私は、クラス、関数、および出力を別々のファイルに保存して、クロスプロジェクトのユーザビリティを次のように少しずつ保持したいと思っています。もう少しPHPコーディングがあるかもしれませんが、結局は再利用性が私を大いに助けました。私はあなたのプロジェクトを以下のように編成します。

ロードされているオリジナルのページ:

<?php require './includes/class/register.class.php'; ?> 
<?php include './includes/registerModules.php'; ?> 

$register = new register(); //Calls the constructor for class 'register' 

<?php registerForm(); ?> // Runs the registerForm() function. Nothing is output to the browser until this function is called. That way you can include a test to see if a user is already logged in and use a header redirect (which requires that no output code be sent to the browser before the header function is called) if you so desire. 

./includes/class/register.class.php

class register { 
    function __construct() { 
     echo 'SYSTEM: This is the register page'; 
    } 
} 

は./includes/registerModules.php

function registerForm(){ 
    echo '<form action="http://abc.org/test" method="POST"> 
    <input type="username" value=""> 
    <input type="password" value=""> 
    <input type="submit" value="Register"> 
    </form>'; 
} 

この方法register.class.phpに追加できるクラスが必要な場合はいつでも、それらをネイシーではないページに含めることができます通常、登録フォームを表示する必要があります。あなたがする必要のある後処理など。クラスはすべてそこにあり、適切なコンストラクタ(この場合は$register = new register();)を使用してクラスをインスタンス化できます。

関数をregisterModules.phpに含めたので、目的の関数を呼び出す場所であれば、関数の出力は関数呼び出しが行われた場所に表示されます。書式設定が容易になります。たとえば、<?php registerForm(); ?>に電話するまでフォームは表示されません。こうすることで、上記のように必要なコンストラクタを作成した後にフォームを再利用し、サイトの他の領域に共通の書式設定でフォームを表示することができます。

この場合、登録フォームは一度しか表示されませんが、これは再利用可能な書式設定であり、共通の要素に適用できます。

+0

ありがとう。間違いなく大規模なプロジェクトのためにあなたのメソッドを使用して調べます。ほんとうにありがとう。 – EGHDK

+0

そして私はあなたに同意します! – bfavaretto

関連する問題