エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

php

【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. …

プログラミングにおける『依存』『密結合』とは【326日目】

こんなワード聞きませんか 『このクラスは、このクラスに依存しているね』 『このクラスとこのクラス、密結合になってるな・・・』 依存って何なんでしょう。 イメージとしては、 『○○さんがいないと、私生きていけない・・・』 みたいなものが思い浮かぶと…

【Laravel】download関数のpathToFileの落とし穴【321日目】

ユーザーにファイルをダウンロードさせたい http://domain_name.com/storage/images/upfile.jpegで画像が出るものをダウンロードさせたい。 return response()->download('/storage/images/upfile.jpeg'); あれ?なぜか動かない。 最初のスラッシュは不要 re…

【Laravel】Cookieを付与する。view関数でbladeも使えます【320日目】

こんな時 LaravelでCookieを付与したい。 (この保存方法だけでは、暗号化された状態で保存されます。なので、ユーザーは内容がわからないです。) 書き方 return response() ->view('blade_file_name') ->cookie('cookie_name', 'value', 30); 何をしてるの b…

【nginx+phpfpm】Laravelでpublic配下のファイルが取得出来ない【306日目】

こんなことがありました。 docker-composeで管理、nginx+php-fpmで環境構築しました! Laravelのチュートリアルページ表示されました! ・・・favicon.icoが反映されない? public/app.cssや、public/app.jsが読み込めない・・・ 起こってること phpは、ngin…

【Laravel】URLが『/hoge』のように、.phpが要らない理由【291日目】

普通のページなら phpの普通のページだと、URLは https://domain.jp/hoge/huga.php のように、phpをつける必要がありました。 では、なぜLaravelはそれが必要ないのでしょう。 必ずindex.phpを開いてるから これはURLがなにであろうと、ドキュメントルートの…

【PHP】cloneを使う時って?オブジェクトはそのままコピーできない?【267日目】

オブジェクトのコピーはできない? $item = new Item(); $item->value = 1; // コピー? $item2 = $item; $item2->value = 2; この時、$itemと$item2の値はどうなるでしょう? 実は両方一緒 // 2 $item->value; // 2 $item2->value; あれ?なんで? インスタ…

【PHP】traitを使って、関数を余分な場所に読み込ませない【223日目】

注意 traitの本質とは違います。オブジェクト指向とかも触れません。 ただ、trait使った時に、実際の動きとしてどんな違いが出るかについてのメモ書きになります。 2つのファイル hello.php

【PHP】'1.0' == '1'がtrueだった。【210日目】

なんで起こるの? 比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され PHP: 比較演算子 - Manual 値をテストしてみた >>> "a" == "0" => false >>> "a" == 0 => true >>> "1.0" == "1" => true >>> "1.0" == 1 => true >>> "1.0" === "1" => fa…

【PHP】HTMLのclassを指定して要素を取得。DomCrawler【209日目】

こんな時に使う <div class="aaa"> <p class="aaa">aaaaa</p> <img src="/test/img.png"> </div> これの、src部分 /test/img.pngが欲しい。 DomCrawler使ってみよう これ使うと、CSSセレクタ使って取得が出来る。 簡単。見やすい。 ■DomCrawler https://symfony.com/doc/current/components/dom_crawler.html テスト用コード (Lar…

【PHP】表示させたページに404のステータスコードをつける【206日目】

こんな時に使う PHPでオリジナルの404ページを表示させたい。 で、ページが例外に入った時にオリジナルの画面を表示させたけど、 ステータスコードが200で正常に表示されている時。 このコード付け足す header("HTTP/1.1 404 Not Found"); これでステータス…

【PHP】PDO使ってSQL文タイポした時にExceptionを投げる【195日目】

こんな時に使う (PDO使う時ほぼないというツッコミは置いておいて) $dbh->exec('CREATE TBLE Pages (id int, name nchar(255), create_date datetime)'); あ、 TABLEが TBLEになってる。 でもエラー出てないから気づかなかった・・・ って時に、エラーを投…

【PHP】相対パスでincludeした後のファイルで、さらにincludeすると読み込めない【194日目】

こんなファイル作りました public/index.php include ../xxx/yyy/temp.php xxx/yyy/temp.php include ../../zzz/item.php zzz/item.php echo 'hello'; これ、動かないです。 どこが問題か xxx/yyy/temp.php include ../../zzz/item.php これ。単体で見たら問…

【Laravel】直前にアクセスしたページのURLを取得する【188日目】

引数を入れた時どうなるかも書きました 取得失敗した時の動作が書かれているよ。 willow710kut.hatenablog.com 直前にアクセスしたURL、ページに来るためのリクエスト元のURL こうかく url()->previous(); 結果 "http://blog.hatena.ne.jp/willow710kut" み…