5

私はPHPで作業しています。Mysqlに保存するには、変数を順番に定義する必要があります。私の場合、フィールド名と変数名の両方が同じである必要があります。

このような変数を宣言できますか

$1 OR $2 etc 

そうでない場合はなぜそうではなく、はいの場合はなぜはい?

私は試した:

$id = 0;
$6  = $_REQUEST['6'];
$7  = $_REQUEST['7'];
$8  = $_REQUEST['8'];

$xary = array('6','7','8','9')

$oAppl->save_record("tablename", $id, "id");

エラーが発生します。

また、Mysqlで同じ名前のフィールドを作成して使用できますか?

4

11 に答える 11

16

これがPHPの設計方法です。変数名を数字で始めることはできません。

できることは、アンダースコアを使用することです。

$_6 = $_REQUEST['6'];

編集: PHPでは 変数は$で始まるので、数字で始まる変数を持つことは可能ですが、数字で始まる変数を許可する他の言語がないため、ほとんどの人にとって少し混乱します(または少なくとも私はしません知っている)。

しかし、数字で始まる変数が許可されていると想像してみましょう。

同僚があなたに言っていることを想像できますか:23は74に等しいですか?それは少し紛らわしいです。n23が74に​​等しいと聞くことは、より理にかなっています。n23は、明示的に言う必要のない変数です

于 2013-03-15T08:15:11.027 に答える
6

はい、PHPで数字で始まる変数を宣言できます。

${'1'} = 'hello';

"1"これにより、PHPで変数名を使用して変数が宣言されます。

これにアクセスするには、中括弧構文を再度使用する必要があります。

echo ${'1'};

PHPコードでは逐語的に書くことができないため、これが必要です。

echo $1;

構文エラーが発生します。


また、Mysqlで同じ名前のフィールドを作成して使用できますか?

はい、できます。PHPと同じように機能します。Mysqlでも、列の数値のみの識別子を引用する必要があります。引用は異なります。

mysql> create table test (`0` INT);
mysql> describe test;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| 0     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

ここではバックティックが使用されます(デフォルトのMysql構成)。PHPマニュアルとMysqlマニュアルの両方でこの詳細が説明されています。また、StackoverflowWebサイトでPHPとMysqlの両方の識別子を引用することに関連する多くの質問があります。

于 2013-09-27T15:03:32.553 に答える
2

それは意味がありません。ただし、変数の動的な名前は引き続き使用できます。

<?php

$name = 1;

$ $name = 'name';
// $ 1 = 'name'; // the same, but syntax not allowed

var_dump($ $name); // value of $1
var_dump(${$name});
var_dump($$name);
于 2017-09-20T14:10:49.877 に答える
1

これについてよく考えてください:

$2d = 42;
$a = 2d;

とは何ですか?2.0?または42?

ヒント、わからない場合は、数字の後のdは、二重リテラルになる前の数字を意味します

コンパイル単位の数字がリテラルを表すのか識別子を表すのかを明確に判断するのは困難です。

スペースが重要でない言語(私が正しく覚えていれば、ALGOLや元のFORTRANのように)は、その理由で識別子を開始するための数字を受け入れることができませんでした。

これは、ストレージまたは数値ベースを示す特別な表記の前にさかのぼります。

詳細については、「変数名を数字で始められないのはなぜですか」を参照してください。

于 2013-03-15T08:14:53.930 に答える
1

@hakreの回答を補強するために、簡潔にするために引用符を失う可能性もあります

${1}

しかし残念ながら、それを文字列値と組み合わせることはできません。私はいくつかの実験を行いましたが、どうやらPHPは文字列または数値のいずれかを期待しているようです。そして、最終的に数値または文字列値を返すか、暗黙的にいずれかにキャストされる中括弧内で何でも実行できます。

<?php
function eight (){
   return 8;
}
${7+'fr'} = ${7*'fr'+1} = ${'hi'.((string)8).'hi'} = ${7.8910} = ${eight()} = ${(eight()==true)+4} = 'hi';

var_dump(get_defined_vars());

出力

array(8) { ["_GET"]=> array(0) { } 
["_POST"]=> array(0) { } 
["_COOKIE"]=> array(0) { } 
["_FILES"]=> array(0) { } 
["7.891"]=> string(2) "hi" 
["7"]=> string(2) "hi" 
["1"]=> string(2) "hi" 
["hi8hi"]=> string(2) "hi"
["8"]=> string(2) "hi" 
["5"]=> string(2) "hi" } 

さらに、私は何か面白いものを見つけました:

<?php
${false} = 'hi';
${true} = 'bye';

var_dump(get_defined_vars());

出力

array(6) { ["_GET"]=> array(0) { } 
["_POST"]=> array(0) { } 
["_COOKIE"]=> array(0) { }
[""]=> string(2) "hi" 
["1"]=> string(3) "bye" } 

つまりfalse、0と1ではなく、空の文字列に評価されますtrue

于 2018-02-23T08:45:14.887 に答える
0

PHPのドキュメントにあるように、次のことはできません。

基本

PHPの変数は、ドル記号とそれに続く変数名で表されます。変数名では大文字と小文字が区別されます。

変数名は、PHPの他のラベルと同じ規則に従います。有効な変数名は、文字またはアンダースコアで始まり、その後に任意の数の文字、数字、またはアンダースコアが続きます。

正規表現として、次のように表現されます。 [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

MySQLに関して、ドキュメントには次のように書かれています。

識別子は数字で始めることができますが、引用符が数字だけで構成されていない場合を除きます。

于 2013-03-15T08:12:28.567 に答える
0

PHPでは、数値で始まる変数を定義することはできません。以下のリンクをご覧ください。変数を定義する基本があります。

PHP変数-基本

于 2013-03-15T08:13:56.400 に答える
0

これは、C、Fortranなどの以前に開発された言語から始まる、ある種の遺産です。また、一部のシェルスクリプト言語には、数字で始まる識別子、つまり入力パラメータのための特別な手段があります。PHP標準は、この一般的な規則に準拠することを単に決定しました。

于 2013-03-15T08:15:23.873 に答える
0

数字(またはそのことについては数字だけ)で始まる変数に名前を付けることはできません。あなたができることは、開始するために別の文字を使用することです(たとえば、アンダースコア、またはそれがどのタイプの変数であるかを示す3文字のコンボ:

$_1 = $_REQUEST['1'];

また

$str1 = $_REQUEST['1'];

また、配列を使用することもできます。

$retrievedValuesFromDB = array();
$retrievedValuesFromDB['1'] = $_REQUEST['1'];

このようにして、両方を同時にループできます。

$i=1;
while ($i<mysql_num_rows())
{
    $retrievedValuesFromDB[$i] = $_REQUEST[$i];
    $i++;
}
于 2013-03-15T08:48:19.353 に答える
0

まず第一に、PHPとして設計されましa variable can't start with a numberた。ほとんどの言語は同じ命名規則に従っています。これは主にbetter readabilityとのためのものcompiling performance optimisationです。コンパイル中の字句解析では、バックトラックは回避されます。

次のような変数があるとします。

test = 12;
123test = 12;

コンパイラtestは、文字「t」に出会うとすぐに識別子であることを認識します。

また、の場合123test、コンパイラは、の後に「t」がヒットするまで、それが数値か識別子かを判断できず3、結果としてバックトラックが必要になります。

于 2020-02-10T09:33:16.277 に答える
0

PHPで変数を正常に作成できるという答えはすべて間違っています。

{num}が実際にnumという名前の変数を作成するという答えはすべて間違っています。

{1}を使用して数値である変数を作成する場合、$GLOBALS変数にはそれがありません。

しかし、によって返される配列get_defined_vars()はおそらくそれを持っているでしょう(私は時々それを取得しません)...

$ GLOBALSを使用して変数を定義することにより、このロジックを別の方法で適用すると、同じことが確実に発生します。

この(ダーティ/不安定な)ロジックを使用することは(ドキュメントで直接説明されているように)絶対にお勧めできません。構文を簡潔にしすぎない限り、プログラミング中に変数名が不足することはないと確信しています。

したがって、他の言語で期待されていたように、先頭に数字を使用したり、変数名として使用したりしないでください。

于 2021-06-29T13:59:26.500 に答える