いくつかの文字列があるとします。PHP で論理演算を使用できるようにするには、どのように変換すればよいでしょうか? それは可能ですか?
例:欲しい
"x=1"&&"x=0"
戻るfalse
。
序章
文字列に論理演算子 &&
と代入演算子の両方があり、文字列=
に論理演算子がある代入を評価したいことに気づきました。どうやってここにたどり着いたのか本当にわかりませんが、これはvery wrong
教育目的のタグです
壊す
"x=1" && "x=0" = False
^ ^ ^
| | |
| |
X == 1 | |
| |
AND |
|
X == 0
上記の式は、 toと同時にすることはできないfalse
ため、常にX
equal
0
1
このような評価を行えるようにするにはPHP
、独自の関数を作成する必要があります。たとえばlogicalString
、式を次のように評価しlogicalString("x=1")
たり、logicalString("x=0")
予測
$x = 1; // Imagine value of X
例 1 &&
// Start Evaluation with &&
if (logicalString("x=1") && logicalString("x=0")) {
echo "&& - True\n";
} else {
echo "&& - False\n";
}
出力 1
&& - False
例 2 - ||
// Start Evaluation with ||
if (logicalString("x=1") || logicalString("x=0")) {
echo "|| - True\n";
} else {
echo "|| - False\n";
}
アウトプット 2
|| - True
使用される機能 (本番環境では使用しない理由を参照)
function logicalString($str) {
parse_str($str, $v);
foreach ( $v as $k => $var ) {
if (! isset($GLOBALS[$k]) || $GLOBALS[$k] != $var)
return false;
}
return true;
}
これを使用できます:
//Returns True if strings are equal, false otherwise
(bool)!strcmp($str1, $str2);
それを関数にラップすると、準備完了です。
あなたのタスクを達成するための最良の方法は、次のようなカスタム関数トラフeval()メソッドを使用することだと思います:
<?php
function checkValues($var1, $var2) {
if ($var1==1 && $var2==1) {
echo "Both values are equal to 1";
} else {
echo "At least one value is not equal to 1";
}
}
$x = 1;
$y = 1;
$z = 2;
$z3 = 1;
eval("checkValues($x, $y);"); // Both values are equal to 1
eval("checkValues($x, $z);"); // At least one value is not equal to 1
/* The eval parameter is a string so you can play with it.
* Don't forget the semicolon ";";
*/
eval("checkValues($x, $z" . 3 . ");"); // Both values are equal to 1
?>
与えられた情報で、何が起こっているのか説明させてください。
if("x=1"&&"x=0")
{
echo "true";
}
else
{
echo "false";
}
出力します
true
あなたが達成しようとしていることは有効ではありません。文字列は論理式ではありません。論理式は、1 つ以上の論理演算子と、論理オペランド、数値オペランド、または関係オペランドで構成されています。続きを読む
上記のコードは以下と同じです
if("string1" && "string2")
{
echo "true";
}
else
{
echo "false";
}
単純に、そこに何があるかは気にしません。気にするのは、空ではない2つの文字列があることだけです。
if("" && "")
{
echo "true";
}
else
{
echo "false";
}
上記は戻りfalse
ます。
結論
文字列は常に文字列であり、論理演算子ではありません。