エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです!

php

【PHP】null合体演算子(??) エルビス演算子(?:)の違い【669日目】

??と?: $a ?: nullや $a ?? nullという表記はよく見ると思います。 特に右は結構書く機会多いですね。 では、これらが何をしてるんでしょうφ(・・ 両方とも、if文の省略 どんな演算子かというと、両方ともよく使うif文の省略系だったりします。 三項演算子をご…

【PHP】エラーの時に出るスタックトレースのようなものを出力する【663日目】

スタックトレースっぽいのを見たい エラーが発生した時とかに見れる、どこの関数で何が呼ばれて・・・ そんなスタックトレースを、エラーを発生させずに確認したい。ログに吐きたい。 スタックトレースじゃない バックトレースってのが出ます。 出てくるのは…

【PHP】変数未定義と配列の未定義の違いの考察【654日目】

注意 根拠のない個人的考えです!ようするにポエムです! こういう理由があるんだよ!って意見があれば、ぜひ教えていただけると嬉しいです。 issetで疑問に思った PHPには、issetという関数が存在します。 https://www.php.net/manual/ja/function.isset.ph…

【PHP】正規表現の区切り文字を変えて、エスケープを減らす【650日目】

正規表現 /ringo/ こんなふうにスラッシュではさみますよね 挟む文字を変えれる #ringo# こんなふうに書くことも出来ます。 何がいいの? スラッシュをエスケープするのを省ける /uri\/ringo/ #url/ringo# こんなふうに、正規表現のパターンでスラッシュを使…

【PHP】配列の中身をすべて書き換える処理の書き方3つ【647日目】

配列の中身をすべて書き換えたい 例えば、数字が入った配列をすべて2倍にしたい。 [1, 2, 3, 4]が、 [2, 4, 6, 8]になるようにしたい。 1.forと配列のインデックスを使う $array1 = [1, 2, 3, 4]; $array_length = count($array1); for($i = 0; $i < $array_…

読みやすいプログラムを書くために。判定用の数値は判定の時に算出する【640日目】

学んだこと $has_という変数名をつけず、データの取得と、countなどの判定とで処理を二段階に分けるのも手 has_xxxのような変数を作っていた $has_user_item = !($items->where('item_type', 'user')->empty()); if (!$has_user_item) { このように、if文内…

読みやすいプログラムを書くために。否定の否定を書かない【638日目】

学んだこと if (! $has_no_ )って否定の否定のコードは、正しく解釈するのが難しくなる 否定の否定文 $has_no_items = ..... // ない場合 if ($has_no_items) { .... } // ある場合 if (!$has_no_items) { .... } 言うまでもなく見づらい 変数名を変える $ha…

読みやすいプログラムを書くために。否定の変数名の言い換え【637日目】

学んだこと その後のコードで反転する目的で、 $is_xxx $has_xxxを変数をつけるなら、$is_not_ $has_notを変数名をつけるのも手 is_not_xxx は、(is not)xxxか、is(not_xxx)とどちらで解釈するか迷うので、最善手とは限らない xxx_items_are_emptyなど、反対…

読みやすいプログラムを書くために。式を一度変数に入れる。【636日目】

私がコードを書いたときに頂いたアドバイス。 コードを読みやすくすために式に名前を付けるという意味で変数に入れるのは良い (正しくは、変数に結果を入れていますが、結果と捉えるより式と捉えるほうがわかりやすいと考え、あえて式と表現します。) 読みに…

【PHP】php.iniには設定を書かないようにしよう!【627日目】

php.iniに設定を書きたい PHPの設定を書きたい。こんなのとか extension=pdo_mysql.so とかとか。 php.iniの場所 php --ini このコマンドでファイルの位置がわかった root@xxxxxxxxxxx:/var/www# php --ini Configuration File (php.ini) Path: /usr/local/e…

【PHP】php.iniなどの設定ファイルの場所を探すコマンド【626日目】

php.iniに設定を書きたい PHPの設定を書きたい。こんなのとか extension=pdo_mysql.so とかとか。でもどこにファイルあるんだっけ。パスが知りたい。 php --ini php --ini このコマンドでわかる root@xxxxxxxxxxx:/var/www# php --ini Configuration File (p…

【xdebug】php.iniなどに書く設定の意味【622日目】

Dockerでxdebug動かす設定をしてみた www.nyamucoro.com こちらで設定をしましたが、この設定の意味なんだろう。 意味わからずに書いては応用が効かないのでいろいろ試して・調べてみました。 zend_extension zend_extension=/usr/local/lib/php/extensions/…

【xdebug】Dockerのphp-fpmとnginxでxdebug対応【621日目】

Dockerの開発環境でもxdebug動かしたい! Dockerでphp-fpmとnginxで環境作っててもxdebugを使いたい! インストールとか、環境構築は省略。 xdebugが入っているのを前提に進めます。 php.iniかconf.d内に設定 Dockerfileにxdebugの設定をオンにするコマンド…

【PHP】関数宣言とif文を組み合わせるとどうなる?【594日目】

if文の中で関数宣言したら? phpって、こんなコードが書けるのです。 if (false) { function xxx() { return true; } } これ、どうなるでしょう? (その前に、こんなコード書く機会あるのかな?) 実行結果 1.通常実行 uirou:~$ php -a Interactive shell php…

【PHP】継承した親クラスのメソッドの前後に追加処理を増やす対応【546日目】

メソッドに追加処理をしたい class Parent { public function hoge() { return 'fuga'; } } class Child extends Parent { } この時、コードをコピペせず、 Child::hoge()側に、追加の処理をしたい。 オーバーライド class Child extends Parent { public fu…

【カンファレンス行こう!】phperkaigiに行くべき5つの理由【531日目】

読者対象 カンファレンス楽しいとか言ってる人が理解出来ない そもそもカンファレンス行ったことない カンファレンスに行ってますかー? みなさん!技術系イベント行ってますか! カンファレンスとか行ってますか! 私はまだ2回しか行ってません(‘ω‘ )←←← な…

【PHP】returnを返さなかったときはどうなる?voidじゃない?【512日目】

こんなプログラムがあったとき public function foo($key, $array) { if($key != null) { return $array[$key]; } } このプログラム、もし$keyがnullだったとき、returnを通らないです。どうなるでしょう。 return nullされる http://php.net/manual/ja/func…

【PHP】newでインスタンス作成時、メソッドチェーンできないとき【510日目】

メソッドチェーンできない!? new Collection()->push(3); これは動かない。 インスタンス化に()をつける (new Collection())->push(3); これでOK! これに15分詰まった・・・

【php】イミュータブルなクラスのフィードバック対応をしてみる【498日目】

昨日こんな記事書きました www.nyamucoro.com これで、イミュータブルっぽいクラスを作りました。 で、最初にフィードバックをもらった方に、あの記事を見てもらったら、こんな記事をおすすめしていただきました。 参考記事 qiita.com qiita.com あれー?昨…

【PHP】イミュータブルなクラスを作ってみる【497日目】

始まりは突然に。 昨日のブログにツッコミが入りました(‘ω‘ ) イミュータブル大切!まあ、この例の場合、UserクラスがchangeStatus()を持つのが本来は良いとは思いますが。 https://t.co/QIQOUy2NFE— hiro@miraito (@hirodragon112) 2019年2月21日 なるほど…

【PHP】油断すると破壊的な関数を書いちゃうよねって話【496日目】

こんなコードがありました PHPに限った話ではないですが。 こんなコードがありました。 function changeUserStatus($user) { $user->status = 2 return $user; } echo $user->status; // 1 $changed_user = $this->changeUserStatus($user); echo $user->sta…

【Faker】boolean関数でTrueの確率を操作+元コード読む【489日目】

fakerって? テストとかでよく使われるFaker。 ダミーの値を作るときによく使われていて、ランダム文字列、それっぽい電話番号、それっぽい住所などをランダム生成してくれます。 booleanの確率操作 trueやfalseを出す確率を実は操作できます。テスト内容に…

【PHP】sprintfで同じ値を使いたいときに、コピペしない方法【479日目】

sprintfで同じ値が使いたい sprintf('1. %s, 2. %s, 3. %d', 'apple', 'grape', 'apple'); こんなふうに、appleが被っている。 %dとかに数値を入れる sprintf('1. %1$s, 2. %2$s, 3. %1$s', 'apple', 'grape'); これで、 %1$sには、appleが入り、 %2$sには g…

【テスト】dataProviderで分岐で読み込む関数名をチェックする【439日目】

概要 XxxService public function func($flag) { if($flag) { return $this->user_repository->xxx(); } return $this->user_repository->yyy(); } こんなとき、xxxとyyyが読み込まれる場合をチェックしたい コード public testFunc($flag, $function_name) …

【PHP】配列で共通している値だけを抜き出す関数【437日目】

概要 1.以下のときに"apple","grape"の値だけを返したい ["apple", "orange", "grape"] ["apple", "grape", "banana"] 2.array_intersect()を使う 配列で、共通の値だけを抜き出したい $array_1 = ["apple", "orange", "grape"]; $array_2 = ["apple", "grap…

【PHP】配列の中の空文字やnull等を削りたいときに使う関数【435日目】

概要 1.以下のときに"a"のキーだけを返したい ["a"=>"ringo", "b"=>null, "c"=>null, "d"=>false] 2.array_filter()を使う 配列で、特定条件のものを削りたい ["a"=>"ringo", "b"=>null, "c"=>null, "d"=>false]; こんなときに、"a"のキーのものを取り出した…

【Laravel】テスト時に、Sessionが持つ値を確認するassert【430日目】

セッションに値をもたせた $request->session()->push('key', 'value'); こんなふうにセッションに値をもたせた時に、 その値を確認したい。 該当したキーと値のペアが存在するか確認したい $this->assertSessionHas('key', 'value'); これでキーと値がチェ…

【phpunit】同じテストコードをコピペしない工夫、dataProvider【423日目】

コピペでテスト書いてませんか よくあるのが、入力を変えると、結果が変わるというテスト。 元コード function testFunc($data) { .... } テストコード function testFunc_いろいろ返ってくる() { $data = true; $expected = [1,2,3], ..... $this->assertSa…

【Laravel】Modelクラスでクエリビルダが動く理由【409日目】

モデルでクエリビルダ? モデルのクラスって、テーブルのレコードをオブジェクトにしたようなイメージでした。 でも、以下のようなコードを見ることがあると思います。 User::select('id')->first(); あれ?selectってクエリビルダだよな・・・ このUserって…

【Laravel】Eloquentのcreateとfillの違いとは【336日目】

■注意 コードは5.2のコードです。ですが、そんなにバージョン上がっても変わってないはずです。 ■結論 基本的にcreateで大丈夫 ■違い 1.createはどうせfill通るので、fillableやguardedの部分は両方使う 2.createは、静的メソッドで、以下までしてくれる 1. …