2

ビュー内のエラー メッセージに定数を使用していますが、管理を容易にするためにビュー内で変数を使用できるようにしたいと考えています。

私の定数のほとんどは次のようになります。

const SUCCESSFULLY_REGISTERED = "<p class='success'>Registration successful!.</p>";

私がやりたいのは、css クラスに変数を使用して、それらすべてを 1 か所で簡単に変更できるようにすることです。これは私が試したことです:

const SUCCESSFULLY_REGISTERED = "<p class='$this->cssClassSuccess'>Registration successful!.</p><p>Log in with the username and password you registered with.</p>";

何らかの理由で動作せず、以下のエラー メッセージが表示されます。それはなぜですか、また、これを機能する方法で行うにはどうすればよいですか?

Parse error: syntax error, unexpected '"' in .../View/RegisterView.php on line 15
4

5 に答える 5

7

定数を定義する場合、これは不可能です。

マニュアル:「値は (たとえば) 変数、プロパティ、数学演算の結果、または関数呼び出しではなく、定数式でなければなりません。」

定数マニュアル php.net
定数式

于 2012-10-09T16:24:33.187 に答える
5

定数 (名前が示すように) は定数である必要があるため、これは機能しませんが、 で回避できますprintf()

例:

const SUCCESSFULLY_REGISTERED = '<p class="%s">Registration successful blah blah blah!</p>'

そして、あなたのビュースクリプトで:

printf(SUCCESSFULLY_REGISTERED, $this->cssClassSuccess);

定数の%sは、の値に置き換えられます$this->cssClassSuccess

于 2012-10-09T16:27:27.017 に答える
1

マニュアル: PHP 5.3.0 以降、変数を使用してクラスを参照できます。

以下のクラスを確認してください。

<?php

class A{

    function __construct($v)
    {
        define("MyConstant",$v);
        echo "MyConstant is ". MyConstant;
    }
}

$a = new A("hello"); //will print MyConstant is hello
?>

上記のコードでは、変数 ($v) の値を定数 MyConstant に代入しています。エラーは発生せず、この関数を実行した結果は次のようになります。MyConstant is hello

ただし、次のような新しい行を追加したとします。

$a = new A("hello"); //will print MyConstant is hello
$b = new A("New Value"); //will generate Constant MyConstant already defined notice..

ここで、行$b = new A("New Value");は次のような通知をスローします: Notice: Constant MyConstant already defined. これは、クラス内で定義された定数が疑似クラス定数であり、スコープがバインドされているコンテキストに関して静的変数であることに似ているためです。また、定数は変更できず、そのスコープはクラスにバインドされているため、上記のエラー行を呼び出すと、本質的に定数を「再定義」しようとします。これにより、前述のエラーが発生します。

クラス内で定数を作成するために使用する場合define、それは純粋なクラス定数ではないことに注意してくださいA::MyConstant。同時に、で実行const AnotherConstant = "Hey";したClass A場合は、 として呼び出すことができますA::AnotherConstant。ただし、 を使用constして定数を作成する場合、その値を変数に設定することはできません。

これにより、動的変数を定数に割り当てる方法と割り当てることができない方法がより明確になることを願っています。

于 2012-10-09T16:29:51.060 に答える
0

問題: カスタム メッセージをキャストし、管理を容易にするために変数を渡す
解決策: Decorator パターンを使用する

interface HtmlElementInterface {
    public function getText();
    public function render();
}

class DivDecorator implements HtmlElementInterface {
    protected $innerHtml;
    protected $class;
    public function __construct($class = null, $innerHtml = null) {
        $this->innerHtml = $innerHtml;
        $this->class = $class;
    }

    public function getText() {
        return $this->text;
    }

    public function render() {
        return "<div class='{$this->class}'>" . $this->innerHtml . "</div>";
    }

}

$message = "Error in the app";
$div = new DivDecorator("myclass", $message);
echo $div->render();
于 2012-10-13T05:51:13.843 に答える
0

定数を動的に生成できる唯一の方法は、以下のように define 関数を使用することです。しかし、別の答えが指摘したように、これはクラスレベルの定数ではありません。

define('SUCCESSFULLY_REGISTERED', "<p class='$this->cssClassSuccess'>Registration successful!.</p><p>Log in with the username and password you registered with.</p>");

それ以降の定数は SUCCESSFULL_REGISTERED で参照でき、不変になります。

于 2012-10-09T16:29:59.797 に答える