gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

PHP小ネタ

filter_inputいる?

こーゆーのがある。

$s = filter_input(INPUT_POST, 'value');
var_dump($s);

興味深くはあるんだけど…デフォルトのフィルターは「FILTER_DEFAULT」で事実上のノーフィルタ。
警告が出ないのはそれはそれで便利なんだけど、それくらいなら@演算子でも足りるしねぇ。
あと、おいちゃん的には「型が不一致」なのは割合と好まないので。結果的に

// 数値
$i = (int)@$_POST['int'];
var_dump($i);
// 文字列
$s = (int)@$_POST['string'];
var_dump($s);

って切りそろえちゃう事が多いかなぁ。
なので、filter_inputについては「特に使用について目くじらは立てないけど、おいちゃんは今のところあまりメリットを感じていない」かなぁ。


ちなみにデフォルトがある場合…PHP7ならNull coalescing(Null合体)演算子が便利。

$s = $_POST['value'] ?? 'def';
var_dump($s);

PHP5系なら、三項演算子かねぇ。

「参照」で値が入るなぞ

上述をいくつか見ていて偶然見かけた、少し「でんぢゃらす」なコード。
まずは普通のあたりから。

ini_set("display_errors", 1);
error_reporting(-1);

function hoge($awk) {
}

hoge($awk['a']);
var_dump($awk);

実行結果

[gallu@www4142ue ~]$ php t.php

Notice: Undefined variable: awk in /home/furu/t.php on line 9

Notice: Undefined variable: awk in /home/furu/t.php on line 10
NULL

まぁ至極穏当かつ真っ当。


で、でんぢゃらすなコード。

ini_set("display_errors", 1);
error_reporting(-1);

function hoge(&$awk) {
}

hoge($awk['a']);
var_dump($awk);

実行結果

[gallu@www4142ue ~]$ php t.php
array(1) {
["a"]=>
NULL
}

…警告出ないわ勝手にkey差し込まれるわ、見方によっては大惨事(苦笑


まぁこれを書いてあるBlogでも推奨していなかったのでいないとは思うのですがすがすが。
「警告を出さないために引数を参照にする」とかいう破廉恥で奇天烈な行為は、絶対に避けましょうw

…privateの意味は?

これは別所で拝見した、コードの一部。

  public function __get($name) { return $this->$name; }
  public function __set($name, $value) { $this->$name = $value; }

…これやって、プロパティをprivateにする意味あるのかしらん?
これならプロパティを素直にpublicにしたほうがマシな気がするのですが?
次点の可能性として「コーディング規約でプロパティはprivateに」ってのがある可能性が想起されるんだけど、そうだとしたら「こんなマジックメソッド書いちゃ駄目だよ」なんのためにそーゆーコーディング規約になってるか、その辺に思いを馳せないと、と思うのですます。


なので、上述マジックメソッドも「………なんで?」って感じなのですなぁ。