0

PHPクラスファイルを使用してWebフォーム経由で送信された変数から値を取得するのに問題があります。

これが私のウェブページの構造です:

  • 注文フォームページ
  • Process.phpページ
  • Book.phpページ

(注文フォームページで)入力されたユーザーデータを簡単に取得し、処理して、Process.phpページに表示できます。問題は、Bookクラスを作成し、Bookクラスを使用してデータの詳細を印刷する必要があることです。

「作成済み」を出力する空のコンストラクターがあるので、コンストラクターが呼び出されていることがわかります。また、「タイトル」という単語を印刷できるので、Bookクラスを使用して画面に印刷できることがわかります。

私の問題は、Bookクラスの変数の値を取得できないことです。

これが私の変数宣言です:

    private $title;

これが私のprintDetails関数です:

    public function printDetails () {
    echo "Title: " . $this->title . "<br />";
    }

これが本のクラスの私の新しいインスタンスです:

    $bookNow = new book;

これが私のget関数とset関数です。

    function __getTitle($title)
{
    return $this->$title;
}

    function __setTitle($title,$value)
{
    $this->$title = $value;
}

他にも4つの変数を表示したいと思っています。それらのそれぞれには、独自の変数宣言、printDetailsの行、および独自のセッターとゲッターがあります。

最後に、プロセスPHPでBookクラスを呼び出します。次のようになります。

    function __autoload($book) {
        include $book . '.php'; 
    }
    $bookNow = new book();

どんな助けでも、大いに感謝します。それはとても小さいものでなければなりません(私は望んでいます)。

4

1 に答える 1

1

_setTitle()引数は1つだけで、次のよう$に、代入ステートメントの2番目の文字(もgetTitle())を削除する必要があります。

function _setTitle($title)
{
    $this->title = $title;
}

今それをこのように呼んでください:

$title = !empty($_POST["title"]) ? $_POST["title"] : NULL;
$bookNow->_setTitle($title);

また、魔法の関数を扱っている場合を除いて、二重アンダースコアを使用しないでください。それは悪い習慣だと思います。また、クラスのケースも確認してください。phpはケースについて非常にリラックスしていますが。クラスファイルの名前が「Book.php」の場合は、念のためにコンストラクターを大文字で呼び出す必要があります(おそらく括弧も)。

編集:OKこれは私が作ったクラスであり、それはうまく機能します、私はそれをテストしました:

class Book {

    private $title;

    function __construct() {}

    function _getTitle($title)  {
        return $this->title;
    }

    function _setTitle($title) {
        $this->title = $title;
    }

    public function printDetails() {
        echo "Title: " . $this->title . "<br />";
    }

}

次のように、POSTで値を取得するようにしてください。

$title = !empty($_POST["title"]) ? $_POST["title"] : 'No Title Found!';
$bookNow = new Book();
$bookNow->_setTitle($title);
$bookNow->printDetails();

注意:上記のステートメントを「book.php」クラスファイル内に配置しないでください。

フォームの送信に失敗した場合は、「タイトルが見つかりません!」と表示されます。それ以外の場合は、正しいタイトルが表示されます。

于 2012-11-04T10:58:30.963 に答える