2017-06-16 15 views
0

私はここで初心者ですが、おそらく私の質問はすでに答えられていますが、Andy Harrisは本を書いています。私はそれを通って楽しんだが、私はここに投稿したいという質問がある(私は彼に手を差し伸べたが、回答は得られていない)。問題のコードです:絶対初心者のためのPHP 6/MySQLのプログラミングpetals.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html lang="EN" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>petals.php</title> 
<link rel = "stylesheet" 
     type = "text/css" 
     href = "petals.css" /> 
</head> 
<body> 
<h1>Petals Around the Rose</h1> 

<?php 

printGreeting(); 
printDice(); 
printForm(); 

//$numPetals = filter_input(INPUT_POST, "numPetals"); 

function printGreeting(){ 
    global $numPetals; 
    $guess = filter_input(INPUT_POST, "guess"); 
    $numPetals = filter_input(INPUT_POST, "numPetals"); 

    if (!filter_has_var(INPUT_POST, "guess")){ 
    print "<h3>Welcome to Petals Around the Rose</h3>"; 
    } else if ($guess == $numPetals){ 
    print "<h3>You Got It!</h3>"; 
    } else { 

    print <<<HERE 

     <h3>from last try: </h3> 
     <p> 
     you guessed: $guess 
     </p> 
     <p> 
     -and the correct answer was: $numPetals petals around the rose 
     </p> 
HERE; 

    } // end if 

} // end printGreeting 

function showDie($value){ 
    print <<<HERE 
    <img src = "die$value.jpg" 
     height = "100" 
     width = "100" 
     alt = "die: $value" /> 

HERE; 
} // end showDie 

function printDice(){ 
    global $numPetals; 

    print "<h3>New Roll:</h3> \n"; 
    $numPetals = 0; 

    $die1 = rand(1,6); 
    $die2 = rand(1,6); 
    $die3 = rand(1,6); 
    $die4 = rand(1,6); 
    $die5 = rand(1,6); 

    print "<p> \n"; 
    showDie($die1); 
    showDie($die2); 
    showDie($die3); 
    showDie($die4); 
    showDie($die5); 
    print "</p> \n"; 

    calcNumPetals($die1); 
    calcNumPetals($die2); 
    calcNumPetals($die3); 
    calcNumPetals($die4); 
    calcNumPetals($die5); 

} // end printDice 


function calcNumPetals($value){ 
    global $numPetals; 

    switch ($value) { 
    case 3: 
     $numPetals += 2; 
     break; 
    case 5: 
     $numPetals += 4; 
     break; 
    } // end switch 

} // end calcNumPetals 

function printForm(){ 
    global $numPetals; 

    print <<<HERE 

    <h3>How many petals around the rose?</h3> 

    <form action = "" 
      method = "post"> 
    <fieldset> 
    <input type = "text" 
     name = "guess" 
     value = "0" /> 
    <input type = "hidden" 
     name = "numPetals" 
     value = "$numPetals" /> 
    <br /> 
    <input type = "submit" /> 
    </fieldset> 
    </form> 
    <p> 
    <a href = "petalHelp.html"> 
    give me a hint</a> 
    </p> 
HERE; 

} // end printForm 

?> 
</body> 
</html> 

彼は彼の本(頁のテキストを持っている人のための95)で述べている:

この関数[printGreeting()]は、$推測の両方を意味し、 $ numPetals変数。どちらも他の関数で必要となる可能性があるため、 はグローバルステートメントで定義されています。 1つのグローバルコマンドで、 グローバルステータスを複数の変数に割り当てることができます。

グローバルステートメントでどこに定義されているのかわかりません。おそらくそれを考えすぎるかもしれませんが、どんな洞察も高く評価されます。

+0

グローバル$ numPetals; –

+3

タイトルにPHP 6の本を使用している場合は、おそらく新しい本が必要です。 PHP 6は決して起こりませんでした。おそらく結果的に時代遅れになるでしょう。 – ceejayoz

+1

グローバルを使用した例を示す本のための同上。 –

答えて

1

グローバル変数 'statement'は、関数内にあっても変数をグローバルスコープとして定義しているため、$ numPetalsを参照するものはすべて同じ値にアクセスします。

関数の外で$ numPetals変数を使用するチュートリアルの後半にコードを追加することもできますが、これは本の中で最初に「グローバル」という概念が導入された理由で説明されています。

PHPで変数を使用する前に必ずしも定義する必要はありませんが、混乱の原因となる可能性があります。

+0

あなたの説明のためにChrisにありがとう。それは理にかなっている。私はちょうど "グローバル$ numPetals"の最初のインスタンスで苦労していたと思います。番組の冒頭でそれに価値がないかもしれないことを理解するためにしばらく私を受けました。 – Jon

関連する問題