質問
編集:私の混乱はおそらく、オプションの値をテストしているページの上部にあるこのコードによって引き起こされていると思います...これにより、get_option('option') メソッドを使用せずにオプションを参照するショートカット メソッドが作成されます。
global $options;
foreach ($options as $value) {
if (get_settings( $value['id'] ) === FALSE) {
$$value['id'] = $value['std'];
} else {
$$value['id'] = get_settings( $value['id'] );
}
}
したがって、テーマのオプションパネルでチェックボックスをオンにして変数 $myvar の値を設定し、「保存」をクリックしてから、worpdress の options.php を表示すると、変数の値は次のようになります。
true
そして、この変数を使用してルックアップを行うと、
if($myvar == "true")
それは通ります。
ただし、このように update_options() メソッドを介して値を直接設定すると...
$mvar = true;
update_option('myvar', $myvar);
値が true から 1 に変わります
そして、前と同じ比較を行うと、if($myvar == "true") が失敗するようになりました。それはもはや「真実」ではありません。
私には何が欠けているのでしょうか?(1) なぜ「true」と 1 は同じに評価されないのか、そして (2) update_option メソッドは、値を true から 1 に変更するために myvar の値に対して何を行っているのでしょうか?
解決
試してみてください
if($myvar == true)
と
$myvar = true;
TRUE
とFALSE
は、PHPのより多くの普遍的な真の文字列よりもブール変数で構築されています。
。これは、オプションは、これを1に変更している代わりに、それがデータベースに挿入されたとき、それは文字列"true"
としてそれを挿入することであるかもしれないということではないかもしれません。それが戻ってくるときに、それが印刷されたブール値true
に変換されている1
他のヒント
試してみてください
if ($myvar)
物事が真の「等しい」かどうかをないテスト、彼らはどちらかの真であるかそうではありません。
まず試験 if($myvar == true)
または単に if ($myvar)
.PHPには不思議なルールは"true";一般的には、文字列evaulate trueの場合の特例 "0"
空の文字列 ""
, るタイプキャストをfalseになります。
にお客様の特定の例では、 if ($myvar == "true")
:
- の場合
$myvar
含まれるboolean型の表現を評価してい(bool) == (bool)"true"
, や(bool) == true
- の場合
$myvar
を含む整数でキャスト文字列に対して比較される文字列"true";でのテストは失敗で"1"!= "true"。 - の場合
$myvar
文字列,文字列比較から、突然のリテラル文字列"true"の成功を比較できます。
したものではないでしょうか2、3の場合は:Wordpressが設定 $myval
の文字列 "true"
さらに掲載してい試験ます。ときに手動で指定すboolean true
, Wordpressが必要に変換する整数値を整数値との比較から、失敗したので、は整数1がキャスト文字列 "1"
場合に対して比較される "true"
.
整数 1 と文字列 'true' の間で大まかな比較を行っています。この場合、PHP は文字列を数値に変換します。数値としての「テスト」は 0 です。
var_dump((int) 'true'); // int(0)
また、0 は 1 に等しくないため、比較は false を返します。
すでに正しく指摘されている他の回答と同様に、以下に対してテストする必要があります。 ブールリテラル TRUE
または true
. 。等価性チェックの 1 つの演算子がブール値の場合、PHP は他の演算子もブール値に変換します。数値 1 の場合、次のようになります。
var_dump((bool) 1); // boolean(true)
true は true と等しいため、テストは成功します。
をチェックしてください タイプ比較表 PHP がどのように型を操作するかを理解するため 平等性をテストする.
何については check_update
あなたのブール値に何をするか、チェックしてください 機能説明:
(混合) (必須) このオプション名の新しい値。この値は、文字列、配列、オブジェクト、またはシリアル化された値にすることができます。
したがって、ブール値は許可されません。から簡単に調べてみました ソースコード 変換が行われる場所ですが、WPは私にとって混乱しているため、見つけることができませんでした。他の人が示唆したように、これはおそらくデータベースに保存してからそれを戻すときに発生します。
「真の」((bool) $string
をキャストしてみてくださいブール1に文字列、およびすべての文字列のevaulatesである。一方true
、引用符なしで、ブール値で、1と評価されます。