0

個々のページでこのコードを使用して、一意のタイトルとアクティブなタブを作成しています。

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\"";
    include "header.php"; 
?>

そして、これらの違いを実行するために、header.phpでこのコードを使用しています。

<title><?php echo $title; ?></title>

<ul id="nav">
   <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li>
   <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li>
   <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li>
</ul>

私がPHPを初めて使用するので、私が最も興味を持っているのは...存在しない変数をエコーするだけで有効ですか?つまり...それは機能し、エラーにはなりません。しかし、私はこれが貧弱なプログラミングであるかどうか疑問に思っていました。

前もって感謝します。

解決済み

一日の終わりに、すべての議論が完了し、これが私の特定のシナリオで最も理にかなっていると私が見つけたものです:

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\"";
    $about = $contact = "";
    include "header.php";
?>

そして、以前と同じように変数を呼び出します。

<ul id="nav">
   <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li>
   <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li>
   <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li>
</ul>
4

3 に答える 3

4

Better programming practice would be to check if it's set first. Such as

if (isset($variable))
  echo $variable;
于 2011-03-04T01:32:36.027 に答える
4

はい、存在しない変数をエコー(およびその他の使用法)することは常に貧弱なプログラミングです。
そして、それは実際にはエラーです-間違ったPHP設定のためにそれが表示されないだけです。

error_reporting(E_ALL);

スクリプトの上部に、これらのエラーが表示されます。

PHPは未定義の変数の使用をほとんど許可していませんが、使用する前にコード内のすべての変数を定義することをお勧めします
これにより、多数の間違いや予期しない動作、さらには深刻な脆弱性を回避できます。

ただし、ほとんどの人は、使用する前に変数の存在を確認する必要があると考えて、この問題を誤解しています。しかし、このトピックについて少し考えてみると、非常にばかげていることに気付くでしょう。そのようなチェックの唯一の目的は、エラーメッセージを吐き出すことだと思われます。それで、言語開発者は、不必要な検証でプログラマーを煩わせるためだけにそのような警告を発明しましたか?

もちろん違います。
この警告の本当の意図は(他の警告と同様に)、何かがうまくいかないことをプログラマーに知らせることです。
本当に簡単です。PHPは「この変数に値を割り当てるのを忘れないでくださいね。これを使用するようです。したがって、値を期待しますが、そうではありません。あなたがたに知らせるために。」 しかし、isset()を使用することで、この警告をギャグするだけで、それ以上のことは何もしません。あなた自身に不利益を与えること。

さらに、変数を初期化することにより、変数の存在とその値の両方を確認できます。

ちょっとした例:

<?
while ($i < 10) {
  echo $i." ";
}
echo "<br>";
while ($i < 10) {
  echo $i." ";
}
?>

このスニペットは何行で印刷されますか?唯一。

したがって、使用する前に、すべてのスクリプト変数を初期化する必要があります。

特別な問題は外部変数です
プログラマーはその動作を制御できません。また、外部変数の存在がアプリケーションロジックの場合である場合もあります。例えば:

if (isset($_GET['id'])) {
  //displays particular article
} else {
  //displays list of articles
}

この方法で確認できます。
ただし、生の外部変数の使用は厳しく制限する必要があります。
たとえば、フォームフィールドに以前に入力した値を入力する場合は、別の変数、たとえば$ FORMを作成し、そのアイテムを生の外部変数から適切に準備された値で初期化することをお勧めします。

于 2011-03-04T01:44:44.540 に答える
2

It will throw a warning, see PHP: printing undefined variables without warning, but whether or not you see it depends on your level of error reporting.

于 2011-03-04T01:31:19.540 に答える