X



【PHP】下らねぇ質問はここに書き込みやがれ 14
0001デフォルトの名無しさん (ワッチョイ 0f97-W3aP)
垢版 |
2022/09/20(火) 16:46:23.39ID:Sb2Kpzh+0
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
★スレ立て時 ↑ が3行以上になるようコピペ

PHPに関する質問スレです

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 13
https://mevius.5ch.net/test/read.cgi/tech/1631147923/

次スレは>>980以降
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
0716デフォルトの名無しさん (テテンテンテン MMde-QSEj)
垢版 |
2023/08/29(火) 13:22:07.40ID:vhEPFWr5M
全然違います
車に例えた例で学んでください
0718デフォルトの名無しさん (ワッチョイ a9a7-vHpx)
垢版 |
2023/08/30(水) 00:27:17.06ID:HAfLNzeH0
オブジェクトの持つ振る舞い=メソッドを記述するのにサブルーチン(PHPの場合関数という)を使うが
それイコールオブジェクト指向みたいな単純な話じゃないから
ここで説明するのは難しい話だし到底理解出来ないと思うから勉強してくれとしか言いようがないね
0721デフォルトの名無しさん (ワッチョイ caa9-1lN6)
垢版 |
2023/08/31(木) 06:52:40.61ID:iJCUhZwo0
クラスがまだ理解できないわ
ユーザ関数をまとめた塊が分身の術を使う感じ?

お問い合わせフォームみたいな小さなプログラムでも
クラスを使って作ることができるのかな
0722デフォルトの名無しさん (ワッチョイ 4abd-QSEj)
垢版 |
2023/08/31(木) 09:48:57.13ID:FDRwTnoH0
無理して使わなくても良い
単純なお問い合わせフォームなら不要だね
0723デフォルトの名無しさん (スフッ Sdea-v2/v)
垢版 |
2023/08/31(木) 09:57:25.50ID:dkvwQp2/d
PHPは出生が貧しい
0726デフォルトの名無しさん (ワッチョイ 8663-JwXX)
垢版 |
2023/08/31(木) 22:18:55.37ID:WloaiZHG0
javascript のlocation.href やlocation.replace をPHPで書きたいのですがうkpまく検索できないのでググるときのキーワードだけでも教えて欲しいです
0728デフォルトの名無しさん (ワッチョイ 8663-JwXX)
垢版 |
2023/08/31(木) 22:30:55.24ID:WloaiZHG0
ありがとうございます😭
出てきました。ちなsmartyだとこうですよね
{php} header ('Location: somepage.php'); {/php}
0730デフォルトの名無しさん (ワッチョイ 8663-JwXX)
垢版 |
2023/08/31(木) 22:53:46.94ID:WloaiZHG0
ありがとうございます😊
0731デフォルトの名無しさん (ワッチョイ 9d90-NK/z)
垢版 |
2023/09/01(金) 12:50:01.84ID:CI/feD+E0
ごめんなさい、知恵をお貸しください。php xamppa(v3.3.0)です。
$sql = 'select * from table where ty=1';
foreach ($stmn as $row) {
$ir = $row['ir']; $gt = $row['gt'];
if ( ($ir == $ro) && ( $st == 0) ) { $gtx = $gt; $st = 1; }
}
$res = setcookie($gtx , $gtx , time()+10000 ,'/');
抜粋なのでご了承ください。
DBのtableに tyで選別したデータgt(a1,a2,a4,a8があるとします)から
ir(1,2,3,4)があるとします。
$ro(3とします)と一致するデータ 、この場合a4が取れてgtxにはa4が残り
a4:a4というクッキーが1つ出来るはずですが、a1、a4という2つのクッキーができてしまいます。
かならずDB最初の値でクッキーが出来るのです
setcookieはループもせず、前後にecho をつけても1回分しかecho表示せず
でも2種類のクッキーが作成されるということは、ループの外でもループ内を2回は動いているのでしょうか。
それともおま環でしょうか。
なにか解決策があるならご教授お願いしたく思います。
よろしくお願いします。
0733デフォルトの名無しさん (ワッチョイ 4abd-QSEj)
垢版 |
2023/09/01(金) 14:11:47.16ID:BMZCfruh0
答える前に日本語の解読が大変
0734デフォルトの名無しさん (ワッチョイ 9d90-NK/z)
垢版 |
2023/09/01(金) 14:19:15.56ID:CI/feD+E0
>>732
ありがとう。
本環境では$st初期化はforeachの外にあります。
本来DBの内容から1回しか処理しないハズでしたが、動作がオカシイのであえて$stを組んだのですがそれでもダメでした。
foreach外でsetcookieは1回しか動かないはずが、foreach内のループで得られたであろうデータをなぜか取得しcookieを作るので
おま環説も疑ってます。

>>733
ありがとう、上手く説明できなくてごめんなさい。
0735デフォルトの名無しさん (ワッチョイ c149-TDjq)
垢版 |
2023/09/01(金) 15:06:01.85ID:1IEXqOVA0
しらんけど書いてないところがおかしいんやろ
こっちはお前と違って各変数の略称や意味もよくわからん
stmnってなに?ステートメント?なんでそこからrow?
irってなに?gtってなに?greater than?じゃあgtxってなに?
stってなに?stmnの一部か何か?
選別って何?selectのことwhereのこと?じゃあgtはカラム?なんでわざわざ別の変数に代入するの
こっちはプログラム全部も見れないのに考えてられっかって感じ

こういうのは試しに、一行ずつ超細かい数行のメソッドに分割してテストすれば整理されて分かったりするから
後で戻すにせよ、ひとつずつ丁寧に見てけよ
それか自分でChatGPTなりにコード全部はって聞いてけ
てかリーダブルコード読め
0736デフォルトの名無しさん (ワッチョイ 9d90-NK/z)
垢版 |
2023/09/01(金) 16:08:01.02ID:CI/feD+E0
>>735
ありがとう。
そうですね、全体で見ないと判らないところもありますものね。
その言葉で全体を見直したら、解決しました。

jquary でした。
使わなくなった <script jquary……> が残っていたので、これを削除することで
クッキーのダブりは解消されました。

助かりました、ありがとうございました。
0737デフォルトの名無しさん (ワッチョイ b3ad-+GqY)
垢版 |
2023/09/02(土) 12:33:53.90ID:ww4K2aY50
お疲れ様です

PHPで

trueの場合だけの処理ってやっぱりありませんかね?
0738デフォルトの名無しさん (ワッチョイ b3ad-+GqY)
垢版 |
2023/09/02(土) 12:34:18.26ID:ww4K2aY50
ifなしで三項演算子とかで
0741デフォルトの名無しさん (ワッチョイ cf63-0HOd)
垢版 |
2023/09/02(土) 22:08:20.07ID:9i23krRm0
三浦恵理子
0743デフォルトの名無しさん (アウアウウー Sae7-fXI3)
垢版 |
2023/09/03(日) 13:21:40.48ID:jFAGdbdCa
>>741
webクロールか
0744デフォルトの名無しさん (ワッチョイ 6f5f-ATpV)
垢版 |
2023/09/03(日) 17:13:18.35ID:RZsz0MwY0
PHPでもif修飾子が使いたいでゴワス
0745デフォルトの名無しさん (ワッチョイ 7301-+GqY)
垢版 |
2023/09/08(金) 01:30:30.68ID:EHbxHCsV0
フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】

【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由

フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説

フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは?

月額150万円以上も可能?ITフリーランスで高単価を獲得できる理由

在宅で年収1000万稼ぐフリーランスエンジニアの稼ぎ方【再現できる】

フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説
0747デフォルトの名無しさん (ワッチョイ ffe1-r5J7)
垢版 |
2023/09/22(金) 03:31:40.72ID:DUfDR45n0
テストに動かしてみたコードとか要らなくなったコードってきちんとした削除手順とかあるの?
普通にゴミ箱ぶっこんでええの?なんか蓄積してたり残ったりする?
0750デフォルトの名無しさん (ワッチョイ 0abd-em0E)
垢版 |
2023/09/29(金) 05:54:25.82ID:JB7cBWOL0
この流れはさすがにネタだよね?
0751デフォルトの名無しさん (ワッチョイ c92e-ZDOV)
垢版 |
2023/10/14(土) 18:52:32.66ID:FXKPsXcG0
>>721
>クラスがまだ理解できないわ
>ユーザ関数をまとめた塊が分身の術を使う感じ?

>お問い合わせフォームみたいな小さなプログラムでも
>クラスを使って作ることができるのかな

全く同じ。ユーザー定義関数との違いが理解出来ていない自分。
よくクラスを、自動車に例えたり会社に例えてる書籍読むけど分からんのよね。うーん
0752sage (ワッチョイ c963-e7li)
垢版 |
2023/10/14(土) 23:13:33.20ID:uhuB6VoQ0
>>751
既に回答されてる通りだよ。
ただの整理術だから、無くても困らないのなら問題ないし、規模が大きくなれば嫌でも実感出来る。
そして(生の)PHPで学ぶのははっきり言って間違い。
Arrayとか、他言語ならarr.indexOf等、最初からクラスになってるので自然と使えるようになる。
最初からlaravel使った場合も同様。
生のPHPで初心者の規模(3000行以下程度)なら自然と学べる事はなく、無理に使おうとしても余計に混乱するだけ。
本が3冊しかないのに本棚買っても整理も糞もない。本立てで十分だし、そのほうが使い勝手もいい。
初心者の規模で学びたければ、他言語(JS/Go/C#/Java/Python/Rubyのどれでもいい)をやるべき。
どうしてもPHPでやりたければ、laravel使うか大型化させるしかない。
0753デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/14(土) 23:15:35.87ID:uhuB6VoQ0
> ユーザー定義関数との違いが理解出来ていない自分。
そもそも違いなんて無い。Goの場合は相互に運用出来るし、
C++やC#の場合はコンパイラが暗黙的に指定してくれるだけ。
一般的には「どう考えても対象を指定するしかないだろ」の場合、インスタンスメソッドにする。
例えば、
$key = array_search('green', $array); // $key = 2;
array_searchは「配列の中から探す」のであって「配列」を指定しないと話にならない。なら最初から、
$key = $array->search('green');
と書かせろや糞言語ガー、
しかもsearchでは返り値の型が分かりにくい、インデックスが返ってくるのなら、
$key = $array->indexOf('green');
と書かせろや糞言語ガー、他言語は全部こうやで、というだけ。
array_searchとかいう糞長い名前が必要なのは、名前のスコープが広すぎるからであって、
各メソッドにしてクラス毎の小さなスコープにすれば短い名前でも衝突しない。
これが便利なので使われてる。つまり、便利だ、というだけ。
0754デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/14(土) 23:16:34.58ID:uhuB6VoQ0
ただしPHPのも「静的メソッド」として実装する方式では合ってるし、
実際にC++の場合は(仮想関数でない場合は)静的メソッドをコンパイラ支援で呼び出してるから、バイナリ的にも同じ。
同様にC#の場合は上記静的メソッドarray_searchを拡張メソッドとして$array->search形式で
見た目簡単に書けるようにしただけで、C++と同様に同じバイナリを呼び出す。
Goの場合はインスタンスメソッドを静的メソッドとして呼びだしたら(逆だったかも?)
第一引数がthis扱いになるだけ、という、C++やC#がコンパイラにやらせてるのをユーザーも書けるようにしただけ。
要するに、普通の関数(静的メソッド)と(仮想関数でない)インスタンスメソッドには違いはない。楽に書けるだけ。
PHPの場合は(今数分見ただけだが)全部仮想関数(virtual、ただしPHPでは別の意味で使われてるが)っぽいので、
array_searchのような静的メソッドの方が呼び出しがデリファレンス1回分速いという違いはあるが、
PHPの実行速度で気にする話でもない。
そしてオーバーライドしなければ上記の(仮想関数ガー)は全部無視していい。

まあ意味不明だろうが、書き方以外の違いはないという事。
ただ再度言うが、小規模の生PHPをやってる限り、この辺が分かるようにはならないよ。
0755デフォルトの名無しさん (アウアウアー Sa8b-3tBr)
垢版 |
2023/10/15(日) 09:04:25.58ID:6aIYZQkKa
プログラムをクラスとかメソッドに分ける時の考え方の一つに「自動テストの書きやすさ」もあるよ。
作ったプログラムを今後も手を入れて改修して行くなら、一般的に改修箇所以外が正常動作するか回帰テストする。

プログラムを作る時に自動テストも作っておくと改修時の回帰テストが楽になる。
自動テストが無いと手動で全機能動作確認になって改修時に改修箇所以外の不具合が出やすくなる。
手動で全機能動作確認は手間がかかり過ぎて大変だから回帰テスト不足で「改修前に使えてた機能が使えなくなった」となりやすい。

今後改修しないその場限りのプログラムなら自動テストは気にしなくて良いと思う
0756デフォルトの名無しさん (ワッチョイ c92e-ZDOV)
垢版 |
2023/10/15(日) 12:35:11.36ID:XVcuYs9l0
>>752 エスパーか?ってくらい自分の状況透かされてて驚きました。まさに生のPHPしか触った事なくて1ファイルMAXでも3000行くらいしか書かないです。本棚の例えも恐ろしくわかりやすいです。

現状、会員制のサイトを生で書いたPHPで運用してるけどユーザー定義関数は使っていて、それに対してクラスの概念やユーザー定義関数との違いが理解出来ていない学習度です。

ユーザー定義関数群を取りまとめたファイルを都度includeで読み込んで各ページで使ってます。これで事足りていてこの方式とクラスの違いが理解出来ていないという。

おっしゃる通り、このまま生のPHPで学習していてもクラスの概念分からないだろうなと痛感しています。
GitHubで他人のコード見てクラスの書き方見てみたりWordPressもコード見たりするけど、やっぱり理解できず。

Laravelとかフレームワーク使って簡単に何か作ってみるのが良いんだろうなぁ…頑張らねば
0757デフォルトの名無しさん (ワッチョイ c92e-ZDOV)
垢版 |
2023/10/15(日) 12:47:11.76ID:XVcuYs9l0
>>755さんは別の方かな?レス有難うございます😊

こちらもおっしゃる通りで、機能を追加していく際に「メンテナンスが大変になってきたな…」と思う事がチョコチョコ出てきました。
ユーザー定義関数群をまとめたファイルをメンテナンスする事で自分の中ではある程度改修しやすくしているつもりなんですが、今後大規模な機能追加を考えた時に『クラスを使う使わない以前にクラスの概念を理解出来ていない事そのものがメンテナンスや拡張性を考慮する選択肢や手段の範囲・幅を狭めているのでは?』と考えるようになりました。

個人事業主で頑張ってる(ユーザー定義関数だけで頑張ってる)けどこのままだと株式会社を立ち上げて規模を大きくする事が出来ない(クラスを使って大規模開発出来ない)気がしています。
変な例えで恐縮ですし例えの中の個人事業主⇆会社のどちらが良い悪いというか意味ではありません。
ただ、自分が今如実に感じている感覚を言語化するなら先述のような感覚です。
0758デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/15(日) 16:52:25.37ID:BnU34f5b0
>>756
> ユーザー定義関数群を取りまとめたファイルを都度includeで読み込んで各ページで使ってます。これで事足りていてこの方式とクラスの違いが理解出来ていないという。
その方法でも間違いではないし、問題ない。
ただ(勘違いしてる馬鹿が多いが実は)クラスベースのオブジェクト指向と
それ以前の(つまり今751がやってる)手法は連続的に繋がっていて、
そのまま進んでいけば自然とクラスベースのオブジェクト指向に辿り着くものなんだよ。
だから(本来は)わざわざ別に学ぶものでもない。
今現在の「クラス」はC++が定義したものであり、
C++の目的は「Cの糞コードを出来るだけ改変せずに何とかする」事だったから、当然なのだが。
そして
> ユーザー定義関数群を取りまとめたファイルを都度includeで読み込んで
が実はCの手法そのまんまで、大規模になるとこれが問題となったので「クラス」を導入しただけ。

「クラス」の意味を初心者が理解出来ないのは、使用方法が多岐に渡る為だ。
だから実態を掴みにくい。
だから逆に、単純に入ればいい。
大規模化したCで問題になったのは、「階層」がないこと。だからクラスで「階層」を付加した。
PHPの場合でも同様で、includeした関数はどこからでも呼べてしまい、階層がない。
それで、複数のincludeファイルで同じ名前の関数を定義してしまった場合、バグる。
これに対するアナログ的解決が、「接頭辞を付ける」で、実際PHPだとarray_xxxxとなっている。
ただしこれでも種類が増えると接頭辞内にも"_"を使いたくなってくる。
そしてxxxx_yyyy_zzzzでみたいな関数名になると、接頭辞がxxxxなのかxxxx_yyyyまでなのか見た目分からない。
だから接頭辞内に"_"を使うのは絶対禁止というアナログ解決も可能だが、
ここで明示的に階層を宣言し、"::"で区切る、つまり、array_xxxx は全部 array::xxxxにする、
というのが「クラス」を「階層」とした使い方。
これは751でも「次の一手」として理解出来るだろ。
0759デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/15(日) 16:53:05.15ID:BnU34f5b0
なんだ、接頭辞を付けて、接頭辞内では"_"禁止、或いは接頭辞を台帳で管理すれば、
つまり、きちんと管理すればアナログで解決出来るではないか、というのは事実で、当たり前なのだ。
既にそうやってアナログ管理されて動いているCの糞コードを、そろそろなんとかするのがC++の目的だし、
それで導入されたのが「クラス」なのだから、元々そういう物なんだよ。
だから
array_search を
array::search と書き直すだけ、階層をアナログで"_"で区切ってたのを"::"にしただけ、
それだけで名前被りの管理の手間が大幅に削減出来ますね、というだけ。

この「次の一手」を同様に繰り返して行けばクラスベースのオブジェクト指向に自然となる。
753の
$key = array_search('green', $array);

$key = $array->search('green');
と書かせろというのも、$arrayは絶対に必要だし、逆にこれがないと何も始まらないのだから、
$arrayの一部としてsearchという関数を定義してしまえば、
$arrayとセットでないと呼び出せなくなるし、
$key = array_search($array,'green'); // error
みたいに引数順序を間違えてバグる心配もないね、というだけ。
そんなのちゃんと管理すればアナログで回避出来るよね、というのは、上記の通り「クラス」の仕様だ。
だから何であれ「クラス」は無くても出来るが使った方が楽、というだけの話。
0760デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/15(日) 16:55:02.15ID:BnU34f5b0
> Laravelとかフレームワーク使って簡単に何か作ってみるのが良いんだろうなぁ…
これは本末転倒だから止めとけ。学ぶ気なら他言語、例えばC#が断然よくて、
C#で簡単なもの作った方が数段まし。
これはPHPの立ち位置がやや微妙だからだ。

既に動いている問題ないコードを破棄しなければならない場合は、
・アドレス空間の枯渇
・速度が絶望的に足りない
の2つで、前者は64bit化で解決済みだから今現在問題になるのは後者。
PHPは絶望的に速度が遅いし、larabelで表面的に誤魔化せてるとしても相変わらず糞なのは事実で、
.NET等、MSがガチでオブジェクト指向で整備したフレームワークと比べたら所詮はゴミ。(larabelもMSではあるが)
larabelはPHPのコード資産が段々と大きくなってきたときに導入するものであって、
最初からlarabel使って大規模なコードをPHPで組むくらいなら、
普通の連中はJSやTSやGoやRust等、他言語使ってるだろ。
実行速度が速い=可読性の高い簡単なコードで済む、という事であって、
動作速度が速いだけで七難隠すんだよ。
だから大規模システムをわざわざPHPで最初から組む馬鹿は誰もいない。
結果的に大規模化した物にlarabel適用してるだけで。
(大規模化=大半をプログラムで処理する=言語がいい方が断然楽)

PHPの場合は実行速度を
・物理で殴って誤魔化す
事が出来るから生き延びてるが、これが出来ないCakeとかは完全に死んでるだろ。
PHPはあくまで小回りが利く規模までで、フレームワークを導入してまで使う規模には適してない。
結果的にそうなったのなら致し方ないが、わざわざ導入してまでやるもんじゃない。
どうしてもWebに拘りたいのなら、この機会にJSかTSを試した方がいい。
少なくともPHPでクラスを学ぶよりは断然ましだし、今後の役にも立つだろうよ。
0761デフォルトの名無しさん (ワッチョイ 13a9-olVp)
垢版 |
2023/10/15(日) 20:49:40.47ID:64Sv/OQW0
>>721書いた者だけど、mc963-e7li氏の言葉はなんとなくわかったような感じ
リレーショナル使わないDBのCRUDするぐらいなら無理にクラスは使わなくて良い、ということね。

php初学時にlaravelの本を読んだ時に呪文みたいなものがたくさんあって
php無理だわと思ったけど、laravel無しでなんとかログイン付のCRUDぐらいなら作れるようになった。
・ある程度コードが書けるようになったらlaravelを検討するのか
・まったくの初学者がlaravelから始めてブラックボックスになっている所は気にするな、というなら
phpしか選択肢が無いなら熟練者はどっちを勧めるんだろう
0763デフォルトの名無しさん (ワッチョイ c962-ZDOV)
垢版 |
2023/10/16(月) 11:26:15.00ID:oWsG313D0
>>758
階層の例えめちゃくちゃ分かりやすいです、なるほどなるほど…
>>721さんと自分は別だけど「クラスの概念が理解出来ない」という点で全く同じだったので書き込んでしまいました。懇切丁寧に教えてくれて本当に感謝です🙏

>>758さんみたいな方が社内に居たら素晴らしいメンターになるのになぁと思いながらも今日もトライ&エラーで頑張ります!
0764デフォルトの名無しさん (ワッチョイ c17e-UrH0)
垢版 |
2023/10/16(月) 11:45:53.44ID:Cp7DR01g0
Ruby の米国年収は、Go/Rust/Elixir の3大言語を超えた!
一方、PHP は情報学部へ行ってない高卒とか

Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7

多くの言語 : 6.5〜7

PHP : 5
Dart : 4.4

Ruby on Rails, AWS Solution Architect は13万ドルとか!

YouTube で有名な雑食系エンジニア・KENTA は、
初心者のキャリアパスは、Rails → Go だけと言ってる

一方、Scala, PHPをオワコン認定した。
使っているのは、Twitter, Facebook ぐらい。

日本はZOZO とか、PHPを使う老人が多い。
たぶん、Web系じゃなくてSIer だろうから、Java に近い。
Railsを使う、モダンなスタートアップとは企業文化が異なる

ガーシーのサロンで使っていたMastodon も、
PHPから、Rails 6 へ変わった

筑波大学でも使っている、Rails チュートリアル日本語版の古いRails 5 なら、
無料で読めるから、まずこれを読むのが最短
0765デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/17(火) 01:20:58.48ID:R59hQw8C0
>>761
小規模なら無理にクラスを使う必要はないが、
クラスを使った方が楽だし綺麗に整理出来るので、知ってれば普通は使う。

> php初学時にlaravelの本を読んだ時に呪文みたいなものがたくさんあって
クラス周りの用語、具体的にはクラス/コンストラクタ/プロパティ/メソッド/継承/仮想関数、
等が理解出来ないのはさすがに不味い。
C++が再定義したオブジェクト指向は超便利だったので、C以外の全てのメジャー言語には実装された。
実際、あらゆるドキュメントが大体この形式で書かれてるだろ。
言語関係なく共通だし、知らないでは済まされない。脳味噌へのインストールは必須。

理解はしたが、使う意味/意義が分からないというのは初心者〜中級者がよく陥る状態で、
大体は規模が小さすぎて恩恵がほぼ無いから分からないだけ。(アナログ管理で全く困ってないだけ)
どうしても実感したければ単純には規模を大きくすればいい。
Cみたいに階層がない状況では、一人のプログラマが取り扱えるコード規模は10,000行程度とされていた。
だから10,000行を超えて頭に入りきらない状況になれば、
「この部分はブラックボックスとして切り出し、動くものとして使いたい」という欲求が出てくる。
API/モジュール/クラス等、切り出し方は色々あるが、
お手軽に同一コード内で切り出すのならクラスが便利なのでみんなそうしてるだけ。
ただPHPならRESTにして鯖を細切れにする事も簡単なので、
こちらを選択して各APIを3,000行程度に抑えれば、オブジェクト指向を一生理解せず無視する事も可能だろう。
0766デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/17(火) 01:21:42.72ID:R59hQw8C0
ただまあそれ以前にPHPはオブジェクト指向には向いてない。
継承の旨味を引き出すには抽象クラスのメソッドで記述する必要があるのだが、
Web周りはオブジェクト指向前提で整備されてないのでだいたいこれが不可能だ。
ここら辺が最初から全てオブジェクト指向前提で設計されてる.NETとかとは違う。
次にPHPの場合は状態保存が出来ない。
オブジェクト指向は各インスタンスに「状態を分散して配置する」ことになるため、
これらを最終的にDBに書き戻すには余分なコードが必要となってしまう。
ここら辺がサーバーが永続的なJS/Go/Rustとは違ってくる。
だからPHPの場合はDBから読み出してこねくり回して吐き出すだけ、
何かあったらDBを更新するだけ、という非常に単純な構造にしかならないわけだが、
実際はこの方がいいので、この点はPHPのショボさが功を奏してる。
Javaの開発工数とか、同様のWebサービスと比べて10倍以上はかかってるだろ。
あれはそもそもオブジェクト指向の「状態を分散して配置する」事自体が間違いな事に気づいてないんだよ。
Javaの連中はJavaこそが大正義であって他はまるで知らない浦島太郎だからあんな事になる。
0767デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/17(火) 01:23:34.74ID:R59hQw8C0
> ・ある程度コードが書けるようになったらlaravelを検討するのか
> ・まったくの初学者がlaravelから始めてブラックボックスになっている所は気にするな、というなら
どっちもありだと思うが、そもそも前提が間違ってる。
フレームワークはステップアップではなく、単純に「楽をする為」に導入するものだ。
よく言われてる、「フレームワークを使わなくても、
フレームワーク内に存在するコードとほぼ同じ物を書くハメになるだけだから、さっさと使え」というのは当たってる。
だからフレームワークのドキュメントをさらっと見て、
自分が使いたい機能が有れば使えばいいし、無ければ使わなければいいだけ。
初心者だから止めとけとか、そういう類の話ではない。
実際、C#やJavaではフレームワークを使わない選択肢はなく、
ハロワで既にフレームワークを使ってるはずだが、特に問題にもなってない。
そして使う場合は基本的にブラックボックス扱いだ。
内部まで確認してたらキリがないので、問題なければ内部コードなんて確認しない。
それは気持ち悪い、というのなら、フレームワーク使わずに自分で組め、でしかない。
(自分で組むよりはフレームワークを内部コード精査後にホワイトボックスとして使うなり、
フレームワーク内のコードを基本パクって改変してオレオレ仕様にしたりする方がバグはないだろうが、
一般的にはこの方式の所はあまり無いのではないかと。
フレームワークのバグを心配するなら、アナログに「枯れた機能だけを使う」で対処した方がいい)
0768デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/17(火) 01:24:30.33ID:R59hQw8C0
この辺はPHP界隈でたまにいる「DBでなく、ファイルでやりたいんですけど…」が分かりやすいだろう。
この場合本人は既にプログラミングはそこそこ出来て、
欲しい物は今現在の自分で十分実装可能だと分かってる。
そしてDBの知識が十分でなく、勉強するのが面倒か、慣れてない物を使うのは危険だと判断してる。
だから自前でファイルから変数を切り出すルーチンを書くわけだ。その方が自信が持てるから。
ただ当たり前だが、同様のコードはDB内には既に存在してて、そいつが書くよりも100倍品質もいい。
そして何だかんだで仕様は肥大化し、
その都度そいつのオレオレファイルDBモドキにもコードが書き加えられていくわけだが、
最終的に、「で?お前はこれに延べ何時間費やしたわけ?それで出来上がったのがこのウンコなDBモドキ?
なら最初からSQL勉強してDB使った方が堅牢で拡張性もあって速度も速いし、工数もかからなかったよね」にしかならない。
(そもそもDB内のコードなんてPHPerは誰も読んでないしブラックボックスだが気にしてないだろ)

だから考えるべきは「今」ではなく「最終状態」であって、
仮にお前の思惑通り事が運んだとして、最終的にどこまでやるつもりなのか?なんだよ。
最終的にも数行読めれば十分ならファイルで構わないが、
最終的にはDBが必要になるのなら、最初からDBで組んだ方がいい。
同様に、最終的にフレームワークが必要となるなら、最初からフレームワークを使うべき。
よく言われてるのは「セッション管理を自前でやるとだいたいバグるからフレームワーク使え」で、
逆に言えばセッション管理を厳密にやる必要がなく、特に欲しい機能もなければ、フレームワークを使う必要がない。
繰り返すがこれは「今」ではない。
つまり、「『今は』初心者だから」「『今は』フレームワークに慣れてないから」
「『今は』DBを知らないから」「『今は』クラスの理解が足りてないから」ではなく、
今、知識/技術が有ろうが無かろうが、最終的に必要なら使って慣れるしかないんだよ。
0769デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/17(火) 01:26:52.67ID:R59hQw8C0
多分721も751も以下分類では中級者になる。

初心者:欲しい機能の実装にも手こずる。(プログラミング経験0〜3000時間)
中級者:欲しい機能は一通り実装出来る。(プログラミング経験3000〜5000時間≒社畜歴2年)
上級者:仕様から複数の実装を検討し、初手から最適解を目指せる。(プログラミング経験5000時間以上)

状況について詳しく言うなら、
・動けばいいのなら何であれ実装出来るから今現在の技術/知識で何ら困ってない。
・果たして自分のコードが美しいのか汚いのかはよく分からんが、
 少なくとも自分のコードは読めるので取り立てて困ってない。
・世の中には他の方法もあるらしいが、勉強する価値があるのかもよく分からん。まあ一応読んではみたが…。
てな所だろう。これは順当な上達過程で、誰しも通る道だ。

そこで道は分かれるわけだが、90年代の場合、

Java(1995):C++が導入したクラススゲー。全部クラスで、ポインタ廃止したら完璧じゃね?
Ruby(1995):C++が導入したクラススゲー。全部オブジェクトでいけるんじゃね?
C#(2000):C++が導入したクラススゲー。でもC++はちょっと…
C++(1983):馬鹿はJava、軟派はC#使ってろ。漢は黙ってC++。
C(1972):いやCで特に不満無いし…。
PHP(1995):クラス?そんなもの無くても出来るでしょ。

同時期以降の別言語が全てクラスを採用する中、ラスマス・ラードフは無視しやがったのがPHPの不幸なところだ。
PHPがArray::xxxやString::yyyとなってれば、「クラスがよく分からない」なんて事になりようもなかった。
が、まあ、これを言っても始まらない。上達の為の次の順当な方策は、JSをやる事だ。
https://プログラマが知るべき97のこと.com/エッセイ/プログラミング言語は複数習得すべき/
0770デフォルトの名無しさん (ワッチョイ c963-e7li)
垢版 |
2023/10/17(火) 01:28:15.91ID:R59hQw8C0
フルスタック(キリッ、の通り、クライアントサイドで何がどこまで出来るかを把握しておく事は全体最適化には必須。
達人である必要はないが、どれくらい手間なのか分からないのは不味い。
クラスは難しいものではなく、使ってないから分からないだけ。
強制的に使うのなら標準がクラスで構成されてる言語がいい。(今のメジャー言語は全部該当するが)
PHPの次はJSだろうよ。
なおPHPの場合は節操なく取り込んでるので結果的に「全部入り」に近く、
PHPだけで学ぶのも理論的には可能だが、そもそも知らない奴が正しい方向性を見切るのは無理なので、現実的に無理だ。
PHPでは今まで通りのコードを書きつつ、JSで色々試し、
クラスに慣れたらPHPでもクラスを使って書いていく、というのが多分妥当な道筋。
0771デフォルトの名無しさん (スッップ Sd33-Y0aP)
垢版 |
2023/10/17(火) 11:52:24.20ID:nEN1t9hTd
Laravelでコーディングする時、コーディングする順序は
1、SQL等のDB周り
2、バックエンド動かすコントローラー(api.phpの方)
3、フロント用のコントローラー(web.phpの方)
4、view

って順序でイメージあってる?
0773デフォルトの名無しさん (ワッチョイ fabd-Tb+e)
垢版 |
2023/10/21(土) 01:03:11.56ID:dh9vzKli0
PHPが遅いってのは分かるが、絶望的に遅いか?って言われたらそうは思わんな
スーパーに買い物に行くのにスポーツカーは必要ないし、むしろ使いにくい
小回りのきく軽自動車で十分って状況も多々ある
0774デフォルトの名無しさん (ワッチョイ 8d36-g91V)
垢版 |
2023/10/21(土) 09:18:37.85ID:yXW/Zb3m0
既に運用中のサイトにおいてPHP7系から8に移行する際、皆さんどんな苦労されました?
自分は前任者が書いたサイトを引き継ぎしたんだけど、内容はPHP5時代に書かれたコードを扱わなきゃいけなくて…
レンタルサーバーが強制的にPHP8に移行するにあたって500ファイルほど目視チェック、動かない原因になる箇所を直していったのが大変だった
countとimplodeとかその辺りの関数がFatal error出すのでシコシコ直していったよ
0778デフォルトの名無しさん (ワッチョイ fe06-j+tp)
垢版 |
2023/11/19(日) 11:56:48.15ID:vcL8dlfS0
>>774
前任者どころか、自分で書いたコードですら修正するの大変だわ
よほどのセキュリティホールでも無い限り、古いまま運用してもいいと思うよ
Javaで古いバージョンが乗っ取りとかってあったけど、
PHPはそういうのないし、ページ毎のセキュリティ対策してたら大丈夫でしょ
(違うなら誰か事例を出して指摘してください
0779デフォルトの名無しさん (ワッチョイ 72e1-N5Jg)
垢版 |
2023/11/22(水) 14:01:49.19ID:gEe16+Fw0
初心者なので初歩的な質問になりますm(_ _)m

phpのフレームワークlaravelについての質問なんですが

Illminate/Foundation/Application.phpのApplicationクラスのbootstrapWithというメソッドの中に$this['events'] -> dispatch( 〜
という記述があるのですがこの$thisはApplicationクラスのインスタンスだと思うのですが
なぜ$this['events']のように$thisの後にブラケットが続いてるのでしょうか?

dd($this)とやって調べて見ましたがやはり配列ではなくApplicationのインスタンスで
dd($this['events'])で調べたらDispatcherというオブジェクトでした
なぜブラケット構文でインスタンスにアクセスできるのか分かりません
この$thisはなんですか?
0782デフォルトの名無しさん (ワッチョイ 72a2-N5Jg)
垢版 |
2023/11/23(木) 00:46:28.93ID:op2UpQwL0
>>780
オブジェクトを作って試しましたがオブジェクトは配列として使用できないとエラーが出ます

どのようにそれを可能にしているのかを教えていただけませんか?

初歩的な質問で申し訳ありませんがググっても出てこないので
0784デフォルトの名無しさん (ワッチョイ 72a2-N5Jg)
垢版 |
2023/11/23(木) 07:25:04.23ID:op2UpQwL0
>>783
スッキリしました。ありがとうございます。
継承元のcontainerクラスで実装されてるのを確認できました。
0785デフォルトの名無しさん (ワッチョイ bf5f-HI/Z)
垢版 |
2023/12/09(土) 23:46:53.06ID:fGdJSgyw0
学習コストが低めのフレームワークでおすすめある?
Laravel,CakePHP以外で
0788デフォルトの名無しさん (ワッチョイ 575f-6RB4)
垢版 |
2023/12/14(木) 21:46:47.06ID:SDKVvk710
プラグインの対応を考えると7.4まで戻さないといけないんじゃないかな?

8.1まではあまり影響なかったけど8.2からひどかった記憶、最後に仕事して一年以上経ってるから状況変わってるだろうけど
0789デフォルトの名無しさん (スップ Sdbf-6RB4)
垢版 |
2023/12/15(金) 15:26:36.63ID:UGjdTC/zd
このフレームワークはプログラム技術板的にPHPなの?Goなの?

 米Laravelは、Go言語で書かれたPHPアプリケーションサーバであるFrankenPHPの最新バージョンとなる「FrankenPHP 1.0」を、12月11日(現地時間)にリリースした。

 FrankenPHP 1.0には、Symphony、Laravel、WordPressなどのネイティブサポートが含まれるほか、Caddyを搭載したプロダクショングレードのPHPサーバであり、PHPアプリのスタンドアロンで実行可能なバイナリとしてのパッケージ化が可能となっている。

 さらに、PHP-FPMとNgnixを個別に実行する必要がなく、1つのサービスのみでPHPサーバを提供できるようになるとともに、PHP 8.2以降のほとんどのPHP機能拡張、およびすべてのCaddyモジュールと互換性がある。

 ほかにも、アプリケーション起動してメモリに保持するワーカーモード、JavaScriptイベントとしてWebブラウザへ送信されるリアルタイムイベント、ZstandardおよびGzip圧縮、構造化されたログ、Prometheusメトリクスを使用したCaddyの監視、HTTPS・HTTP/2・HTTP/3のネイティブサポート、HTTPS証明書の自動生成や更新、ダウンタイムなしでのアプリのデプロイといった、充実した機能を搭載している。
0793デフォルトの名無しさん (ワッチョイ 338a-pDLy)
垢版 |
2023/12/28(木) 04:23:04.89ID:NBXduxv20
フラグ管理の効率的な方法を教えて下さい。
作成中の社内向け事務アプリなんですが、判定要素が多くなりすぎて毎回読む度に悩みます。

ユーザーに割り当てられた権限や日時による分岐がめっちゃ多いです。
例えば、シンプルなやつだと下記みたいな感じです。
※権限には、種類とランクがあります。

・権限Aを持っているユーザーB〜Eが、日時F〜Gの間に許可した時だけ、
 ユーザーH・Iが日時J〜Kの間だけ権限L・Mを付与されて、
 その権限を行使して処理NまたはOを合計2回行った時に、その権限を付与したユーザー(B〜E)の権限PをQ〜Rの期間降格する。
0795デフォルトの名無しさん (ワッチョイ df6f-tnpw)
垢版 |
2024/01/10(水) 16:15:07.69ID:PTL/6ftd0
PHPのクラスを理解できていない 及び 運用・実装したことない
ユーザー定義関数なら扱えるレベル
CakephpやLaravel等のフレームワーク扱った事がない
実務は約5年

これで中途採用の場合、月収幾らくらいが妥当ですか🥹
0796デフォルトの名無しさん (ワッチョイ 7fa9-W2R0)
垢版 |
2024/01/10(水) 16:53:39.33ID:dVV8o+q90
>>795
おぉ、同じぐらいだわ。
PHPはフレームワークとか知らないし、ユーザ関数ちょっと作れたりするぐらい
フォームメールとかマスタデータの登録編集ぐらいできて48万ぐらい貰ってるよ
0798デフォルトの名無しさん (ワッチョイ df0e-tnpw)
垢版 |
2024/01/10(水) 20:16:50.25ID:PTL/6ftd0
>796 >797
ええええー!マジですか😭…羨ましい!!
メールフォームはもちろん、サーバー関連もLinux一通りは触れて、データベースも GUIではなくてLinux上から操作出来るくらいのレベル感ではあるんだよね…

求職する時、文字だけだと自分のレベル感と会社が求めてるレベル感が分からなくていつも「クラス実装出来ないし概念理解してないけど大丈夫かな」とか「フレームワーク扱った事ないし…docker?何それ美味しいの?」って感じで二の足踏んでしまうんだよね
0799デフォルトの名無しさん (ワッチョイ ff5f-03E5)
垢版 |
2024/01/12(金) 00:03:02.51ID:twL7njza0
フレームワークを扱えばいいし、dockerも勉強すればいいよ
そもそもフレームワークなしでやれてたんなら 何でも独学できるだろ
体系的な学習はとにもかくにもいじり倒した後からだ
0804デフォルトの名無しさん (オッペケ Srbd-Ti6e)
垢版 |
2024/01/31(水) 13:32:55.85ID:k++D0k1Yr
>>803
俺はデザイナーなので仕事上ではなくてもいい資格なんだが、取りやすそうで見栄えも良さそう資格って事でこれとろうかなと、webクリエイターの資格もってるがゴミ資格なんでゴミ資格でもないやつ取りたい。
0805デフォルトの名無しさん (ワッチョイ b6d0-9w1M)
垢版 |
2024/01/31(水) 14:50:49.67ID:GiaFK7PQ0
>804
少しでもプログラムを書く予定があるなら PHP8が良いよ
なぜかと言うと、7→8のアップデートで仕様が大幅に変わったから
7の細かいルールを覚えてしまってから8を触ったら「あれ?動かない…」となる可能性あるので
0807デフォルトの名無しさん (ワッチョイ 8a8b-7cac)
垢版 |
2024/01/31(水) 15:18:08.36ID:Cu19VVGy0
逆にIT系の資格一杯持ってるやつのほうが実務で使えねー
レスを投稿する


ニューススポーツなんでも実況