1

PHPでダブルコロンを使用する方法を学びました。内部に多くの関数を持つクラスがあります。

class auth {

/* .... Other Functions ...*/

    public function logout ()
    {
        session_start();
        $_SESSION = array();
        if (ini_get("session.use_cookies")) {
            $params = session_get_cookie_params();
            setcookie(session_name(), '', time() - 42000,
                $params["path"], $params["domain"],
                $params["secure"], $params["httponly"]
            );
        }
        session_destroy();
    }

}

ここで、このauth.class.phpを別のファイルlogout.phpに含めてから、

auth::logout();

phpエラーをE_ALLレベルにしたときに、エラー( 「ヘッダーはすでに送信されています」を除く)は見つかりませんでした。

スコープ解決演算子は静的関数でのみ機能すると聞きました。だから私はパズルにいます、それをよりよく理解するのを手伝ってください... plz

4

6 に答える 6

3

非静的関数は、静的な方法で呼び出すことができます(あなたが行うように)。PHP 5.3はやや厳しいと信じていますが、それでも可能です。この場合、関数はオブジェクト自体の変数を参照しないため、問題は発生しません。したがって、実際にはオブジェクトインスタンスに依存しません。そのため、エラーは発生しません。

しかし、それでも、私はこれをしないようにアドバイスしたいと思います。あなたのコードは混乱するでしょう、そしてそれは将来のバージョンで壊れるかもしれません(そしてそうすべきです)。

于 2012-04-19T07:52:17.380 に答える
0

session_start();authクラスの一部ではなく、ブートストラップ/初期化コードの一部である必要があります。プロジェクトで実行される最初の行に沿ってどこかに配置します。session_start()を呼び出す前に何かを出力すると、ヘッダーに既に送信されたエラーが発生し、結果は予測できなくなります。

于 2012-04-19T07:48:08.050 に答える
0

logout()メソッドを静的に呼び出します。staticしたがって、のようなキーワードをメソッド定義に追加する必要がありますpublic static function logout()

header already sentエラーは、Realヘッダーが送信される前にブラウザに出力されたデータがあることを示します。phpの出力またはエラーの可能性があります。

于 2012-04-19T07:48:53.143 に答える
0

PHPは、静的メソッドと非静的メソッドでは非常に緩いです。PHP設定で厳密モードをオンにすると、これはエラーになります。

また、「PHP 4には(関数宣言コンテキストで)静的キーワードがありませんでしたが、::を使用してメソッドを静的に呼び出すことができました。これは下位互換性のためにPHP5でも継続されました。」

参照:「::」を使用した非静的メソッドの呼び出し

于 2012-04-19T07:49:12.640 に答える
0

それはあなたともっと関係がありますsession_start()ブラウザに出力する前に
、 この関数を実行する必要があります(テンプレート、エコー、または前の空白の場合もあります)。<?php

とにかくページをロードするたびに必要になる可能性があるので、最初にロードされる構成ファイルのどこかに配置することをお勧めします。

于 2012-04-19T07:46:06.193 に答える
0

まず、静的関数でのみ機能するスコープ解決演算子を使用していることです。publicの後にstaticキーワードを使用してこの関数を静的にする必要があり、そのクラス名で呼び出すことができます。そのクラスのオブジェクトを作成する必要はありません。または、このようなオブジェクトを作成できます。

<?php 
     $myobject    = new myclass();
?>

そして、1つの主要な人はsession_start();を考えます。関数はヘッダー情報をサーバーに送信するため、Webページの最初の行にする必要があります。サーバーはそれらを保存します。そうしないと、すべてのhtmが常にhttpヘッダー情報をサーバーに送信するため、php関数を使用してヘッダー情報を再送信することが問題になります。したがって、session_startは任意のページの最初の行である必要があります。

これに関連する場合は、info.gtensoft.inにメールを送ってください。Gtensoftwaresのシニア開発者www.gtensoft.in from new delji、india

于 2012-04-19T08:44:06.183 に答える