2013-03-15 3 views
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でフィールドを作成して使用することはできますか? php documentationとして

+0

すべての変数に$が付加されているため、Phpは数値で始まる変数を持つことができます。しかし、それは大会です。 – Ihsan

+0

同様の機能が欲しいですか? PHPは柔軟性があります。たとえば、次のようなループを使って$ i0〜$ i15を作成できます。for($ x = 0; $ x <15; $ x ++)$ GLOBALS ['i'。$ x] = null; – Ihsan

+0

[変数名が数字で始まるのはなぜですか?](http://stackoverflow.com/questions/342152/why-cant-variable-names-start-with-numbers) –

答えて

14

これはPHPが設計された方法です。数値で変数名を始めることはできません。あなたは何ができるか

は、使用アンダースコアです:

$_6 = $_REQUEST['6']; 

EDIT: 変数はPHPで$で始まることから、数字で始まる変数を持つことが可能であろうが、それは次のようになり数字で始まる変数を許可する他の言語がないので(少なくとも私は知らない)、ほとんどの人に混乱を招くことになる。

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

あなたに同僚のことを想像できますか:23は74ですか?これはちょっと混乱します。聴覚n23は74と等しくなります。あなたが知っているn23は、それを明示的に言うことなく変数です。

+2

なぜ、なぜですか? – Methew

+0

@Methew:編集 –

+0

を参照してください数字のみからなる変数名。 Mysqlの同じ識別子 - それが有用なのは単なる質問です。しかし、具体的な質問に実際に答えるには:http://stackoverflow.com/a/19054047/367456 – hakre

0

はできませんので、こう述べています。PHPで

基本

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

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

が、それはこのように表現することになります。 [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

は、MySQLに関しては、documentationは言う:

数字で始めるかもしれませんが、引用されていない限り、単に から成っていないかもしれ

識別子数字の

0

PHPで数値で始まる変数を定義することはできません。下のリンクを見てください。それは変数を定義する基本を持っています。まあ

PHP Variables - Basics

1

このことについて考える:

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

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

ヒント、あなたがそれを取得しない場合、それはunambiguoslyコンパイル単位の数値の文字がリテラルか表現かどうかを決定することの困難さがあり、二重リテラル

である前に、番号の後にdは数を意味します識別子。

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

これは、特別な表記法の前に、ストレージまたは数値ベースを示す前に戻ります。より詳細な議論をご覧ください

Why can't variable names start with numbers?

+0

+1の追加リンク。 – Vesper

+1

これはこの文脈ではひどく間違っています。これはCの構文に対する答えでした。PHPの変数は$で始まるので、あなたの例は実際には構文的に間違っています。 ($ 2dは2dではない) –

+0

PHP変数は$で始まります。数字を許可しない理由はありません。 [ローストの終わりを飾る花嫁]のようなものを除きます。(http://www.snopes.com/weddings/newlywed/secret.asp) –

0

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

0

数値で始まる変数(またはその問題の数値)を指定することはできません。あなたは何ができるか は、例えば(開始するには、別の文字を使用し、アンダースコアである、または3 lettercomboはそれが変数の型と言って:

$_1 = $_REQUEST['1']; 

か、また何ができるか

$str1 = $_REQUEST['1']; 

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

あなたは同時に両方をループすることができますこの方法:

配列を使用しています3210
$i=1; 
while ($i<mysql_num_rows()) 
{ 
    $retrievedValuesFromDB[$i] = $_REQUEST[$i]; 
    $i++; 
} 
5

はい、あなたは数字で始めるPHPの変数を宣言することができます。

${'1'} = 'hello'; 

これはPHPの変数名"1"で変数を宣言します。それにアクセスするには

、あなたは再び括弧構文を使用する必要があります。

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のマニュアルの両方でこのことを説明しています。また、StackoverflowのWebサイトでPHPとMysqlの両方の識別子を引用することに関連する多くの質問があります。

+0

変数名が数字で始まるjsonをデコードするには、hakreによって提案された構文を使用するしかありません。 $ json = '{"52WeekChange": "0,3"}'; $ decoded - > {'52WeekChange'}にアクセスできます。 – Tama

+0

私はこれも考えました。これはあなたがそれに最も近づくことができます。しかし技術的には、変数は中かっこで始まります;-) –

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); 
0

@のhakreの答えを強化するためにあなたはまた、簡潔

${1}

悲しいかなための引用符を失う可能性があり、あなたは文字列値とそれを組み合わせることはできません。私はいくつかの実験を行い、明らかにPHPは文字列か数値のどちらかを期待しています。また、中かっこ内の何かを行うことができ、最終的に数値や文字列値を返したり、どちらかに暗黙的にキャストしたりできます。出力

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 
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()); 

はAddtionally私は何か面白いことが見つかりました:

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

var_dump(get_defined_vars()); 

出力をfalseは、空の文字列に評価しない0意味

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

nd true〜1

関連する問題