ホームページ > バックエンド開発 > PHPチュートリアル > このエラーの原因を教えてください。

このエラーの原因を教えてください。

WBOY
リリース: 2016-06-23 13:44:02
オリジナル
959 人が閲覧しました

ローカルにインストールされた ecshop Web サイトは、インターネットにアップロードされるとこのエラーを報告します。 厳格な基準: lib_main.php の 2661 行目では変数のみが参照によって渡される必要があります。 ローカルの php は 5.2 です。

このファイルの 2661 行目は次のようになります。 ext = end(explode ('.', $tmp));

$tmp =basename($tmp,".$ext"); 理由は何でしょうか? ( solution)

厳密な標準: 参照によって渡されるのは変数のみです

厳密な標準: ここには変数のみが含まれます

$ext = end(explode('.', $tmp)); $t = $ext =explode; ('.' , $tmp);
$ext = end($t);

これは php 5.4 以降でのみ利用できるエラーチェックです

実際、php はより簡潔な関数を既に提供しています

$ext = pathinfo($tmp , PATHINFO_EXTENSION);

以下のように、end に必要なパラメータは参照型であり、参照型は左辺値でなければなりません
混合 end ( array &$array )
関数explodeは右辺値を返しますが、これは変数として使用できません。 Reference

mixed end ( array & $array )

end 内部パラメータは参照型です。

explodeで返される結果は変数ではないため、エラーが発生します。


実は、それを変えるだけです。

$ext = substr($tmp, strrpos($tmp,'.')+1);
ログイン後にコピー

または

$ext = explode('.', $tmp);$ext = array_pop($ext);echo $ext;
ログイン後にコピー


繰り返しますが、これはエラーチェックレベルによってのみ発生します
end 関数が関数
echo phpversion() , PHP_EOL; //打印出 php 把本号$tmp = 'aaa.ext';$ext = @end(explode('.', $tmp)); //屏蔽掉错误信息echo $ext; //输出 ext
ログイン後にコピー
の戻り値を受け入れられないわけではありません


熱心なご回答ありがとうございます

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート