[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2ch.scのread.cgiへ]
Update time : 02/23 23:57 / Filesize : 381 KB / Number-of Response : 998
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【PHP】下らねぇ質問はここに書き込みやがれ 14



1 名前:デフォルトの名無しさん [2022/09/20(火) 16:46:23.39 ID:Sb2Kpzh+0.net]
!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

669 名前:デフォルトの名無しさん (スップ Sd8a-VFKZ) mailto:sage [2023/08/03(木) 13:55:32.28 ID:7OoRnNP6d.net]
補足です
$_POST['value']には、整数が入力されることを想定しています
よろしくお願いします

670 名前:デフォルトの名無しさん (ワッチョイ 0ba7-IjPS) mailto:sage [2023/08/03(木) 15:48:42.48 ID:zTGCMZ+m0.net]
格納するDBのカラムにデフォルト値がセットされていればデフォルト値に合わせるか何も入れない
セットされていないなら入力がmustってことなので
とりあえず格納が可能になるよう0にしてしまうとかいう発想がおかしいので入力しろとエラーを返すべき

671 名前:デフォルトの名無しさん (ワッチョイ 0ba7-IjPS) mailto:sage [2023/08/03(木) 15:50:08.52 ID:zTGCMZ+m0.net]
not null制約かどうかは書いてなかったね
まあそのカラムの性質によるとしか

672 名前:デフォルトの名無しさん (スップ Sd8a-VFKZ) mailto:sage [2023/08/03(木) 16:23:03.22 ID:7OoRnNP6d.net]
>>670
ありがとうございます

>>デフォルト値に合わせるか「何も入れない」
>>格納が可能になるよう0にしてしまうとかいう発想がおかしいので「入力しろとエラーを返すべき」

この2点を考慮すると、空文字で初期化するのが正しいようですね
POSTデータが空なのだから、空文字で初期化して、データチェックで
空の場合をエラーとして弾くのが正解な気がしてきました

673 名前:デフォルトの名無しさん (スップ Sd8a-kJnY) mailto:sage [2023/08/03(木) 19:00:43.99 ID:boco8q6Md.net]
POSTの必須チェックはemptyで十分(暴論)

674 名前:デフォルトの名無しさん (スップ Sd8a-VFKZ) mailto:sage [2023/08/03(木) 20:11:24.13 ID:7OoRnNP6d.net]
$value = $_POST['value'];
これだと値がセットされていない場合にNoticeエラーが出るんですよね
それで、emptyやissetが使わていたように思います

もっとも最近では、filter_inputが推奨されているようで
すでにfilter_inputが主流になっているのでしょうか

675 名前:デフォルトの名無しさん (ワッチョイ be63-1j9t) mailto:sage [2023/08/03(木) 20:29:00.58 ID:K+C7K/360.net]
どうやるかは色々流儀があると思うけれど
何故そうするのかを知っておくことは大事だと思う

676 名前:デフォルトの名無しさん (ワッチョイ 2a01-58Wo) mailto:sage [2023/08/03(木) 21:42:47.27 ID:NRjs0yDQ0.net]
フォームの項目が動的に変化するタイプとかで
そもそもクライアントから送信されてない項目を参照しようとしてるんじゃないの?

677 名前:デフォルトの名無しさん [2023/08/08(火) 08:38:58.74 ID:GtqdAqIbF]
タ゛サヰ夕マ県民は住民の生命と財産を破壞する世界最悪の殺人テ囗組織公明党に推薦され、カによる―方的な現状変更によってタ゛サイ夕マまで
数珠つなき゛て゛鉄道の3Ο倍以上もの莫大な温室効果ガスまき散らすクソ航空機を倍増させて気侯変動させて海水温上昇させて、かつてない量の
水蒸気を日本列島に供給させて越谷や川越など、あちこち水没させられながら強盗殺人の首魁齋藤鉄夫と共謀して私利私欲を追求し続ける大野
元裕人殺し知事を落選させてタ゛サイタマの汚名を払拭しよう!熊谷どころかタ゛サヰタマ全域を灼熱地獄にして熱中症で殺害,クソ航空騷音に
よって知的産業根絶やしどころか,ストレスやらで救急搬送されたり.耐えられす゛引っ越しを余儀なくさせられた住民まで発生させて、憲法
1з条25条29条と公然と無視して住民の私権を根底から奪い取ることで私腹を肥やし続ける知事を続けさせて殺されないて゛済むと思うなよ
庁舍が住民に破壊される民主主義國フランスに対して日本は絢爛豪華な庁舎で冷房カ゛ンカ゛ン,クソの役にも立たないと゛ころか住民の権利を強奪
して私腹を肥やすこと以外に何ひとつ考えることのないクソ公務員を放置することこそか゛,お前らの生活と国家の存亡の危機だと理解しよう!

創価学會員は.何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まて゛出てる世界最惡の殺人腐敗組織公明党を
池田センセーか゛口をきけて容認するとか本気で思ってるとしたら侮辱にもほと゛があるそ゛!
hTΤΡs://i、imgur,com/hnli1ga.jpeg



678 名前:デフォルトの名無しさん (ワッチョイ aba7-SCbl) mailto:sage [2023/08/07(月) 17:05:23.27 ID:g4YHb1dg0.net]
>すでにfilter_inputが主流になっているのでしょうか
PHP5.3あたりではまだissetが当たり前だったけど
PHP5.4あたりからfilter_inputの記事が多くなった気がしたな
PHP7になってからはnull合体演算子(??)もissetの代替であげられるけど
filter_inputがよく使われてる気がする
高精度ではないけどそれでいいなら用意されてるフィルタである程度バリデーションできるし
なんならコールバックのユーザ定義関数でもフィルタリングできるし
あまりごちゃごちゃ書かないですむメリットもある

679 名前:デフォルトの名無しさん (ワッチョイ df10-D1BR) mailto:sage [2023/08/08(火) 16:45:09.01 ID:P3IKMInR0.net]
でも、AIに質問するとissetの例を出してくるよ

680 名前:デフォルトの名無しさん (スップ Sdd7-a4kh) mailto:sage [2023/08/08(火) 21:06:35.11 ID:InM7lKihd.net]
>>678
ありがとうございます。とても参考になりました

公式サイトをしっかり読めばいいのだけど、個々の文法の解説がメインで
流れのあるチュートリアルとしては弱いんだよね
もちろん公式サイトの充実ぶりにはとても感謝しています

PHP8に準拠したお手本となるようなPHP本が出るといいなぁ

681 名前:デフォルトの名無しさん (ワッチョイ 915f-OkRc) mailto:sage [2023/08/10(木) 16:13:43.00 ID:+eZjCzx+0.net]
それぞれのメリットを教えてくれ

AI:
filter_inputとissetを使用したバリデーションには、それぞれ異なる目的とメリットがあります。以下にそれぞれの関数の特徴とメリットを挙げてみます。

1. filter_input:
目的:
filter_inputは、入力データ(例:POSTやGETからのデータ)をバリデーションおよびサニタイズするための関数です。
メリット:
サニタイズ: さまざまなフィルタを使って、データをクリーンにすることができます。例えば、文字列としてのメールアドレスを取得することができます。
バリデーション: 予期しないデータや危険なデータを防ぐための具体的なルールを適用することができます。
セキュリティ: filter_inputは、セキュリティ上の理由から直接的なスーパーグローバル変数($_POSTや$_GET)へのアクセスを回避します。
2. isset:
目的:
issetは、変数がセットされているかどうかをチェックするための関数です。変数がセットされており、NULLでない場合にTRUEを返します。
メリット:
シンプル: コードの意図が明確で、変数が存在するかどうかを簡単にチェックできます。
パフォーマンス: issetは非常に高速で、ほとんどの場面でのオーバーヘッドがありません。
NULLチェック: 変数がNULLかどうかも同時にチェックします。
結論:
issetは変数の存在をチェックする場面で主に使用され、filter_inputは変数の値を検証・サニタイズする場面で使用されます。
セキュリティや入力のバリデーションが関わる場面では、filter_inputの使用が推奨されます。一方、単純に変数の存在を確認したい場合や、パフォーマンスが重要な場面では、issetの使用が適しています。
状況やニーズに応じて、適切な関数や方法を選択することが大切です。

682 名前:デフォルトの名無しさん (ワッチョイ 9aa9-i0IF) mailto:sage [2023/08/18(金) 05:27:16.73 ID:+mar7LqR0.net]
チェックボックスでレコードに関するフラグをmariadbに登録する時は
php内ではtrue, falseと、1,0で条件分岐どっちがいい?
mariadbはtrue, falseのboolで保存できないので、結局取り出すときは1と0の文字列になるけど
どういう管理というかルールにしたら良いか迷ってます

683 名前:デフォルトの名無しさん (ワッチョイ 76e7-eQmn) mailto:sage [2023/08/18(金) 11:22:44.15 ID:MbvK7wD/0.net]
>>682
0か1の数値にすると良いでしょう。
文字列はやめましょう。

684 名前:デフォルトの名無しさん (スップ Sdba-ORuG) mailto:sage [2023/08/18(金) 19:35:38.53 ID:2Xzv42cCd.net]
>>682
0か1の整数型だね
INSERTをする前に値をintvalする
SELECTをした後に値をintvalする

PHPの内部ではint型として扱い、厳密な比較をする
ただしPOSTされた時点では文字列なので、バリデーションは文字列として扱う
もっともチェックボックスだとチェックがないと、たぶん値が何も来ない

685 名前:デフォルトの名無しさん (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/19(土) 20:10:29.17 ID:28+RhaxH0.net]
>>683-684
ありがとうございます。
初学者なのでtrueとかfalseとか憧れてそれで作っていましたが、db周りの出し入れをしているうちに
キャストに統一性が無い感じがモヤモヤしていました。

フラグのチェックボックスは
filter_input(INPUT_POST, 'hoge', FILTER_VALIDATE_BOOLEAN)
を使っていました。

チェックボックスにチェックが無い場合はデータベースに入れる前に三項演算子で
isset($_SESSION['hoge']) ? 1 : 0;
isset($_SESSION['hoge']) ? 1 : 0;
フラグのありなしをつけてinsert, updateしていますが、確かに整数に揃えたほうが良かったですね。

686 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) [2023/08/19(土) 23:28:02.55 ID:2LFpxJcr0.net]
>>685
おい、一応言っておくが、>>683-684は間違ってるぞ。
PHP内はtrue/falseで作るのが正しい。
つかちょっと考えれば分かるだろ。
お前はDBを変更した際に、そのDBがtrue/false使えたら全部書き直すつもりなのか?

DB依存事項はDB側に押し込むのが基本。mariaはPDOには無いようだが、
理想的にはそういったDBアクセスラッパに押し込んでしまって、
PHP側はDB依存無し、つまりtrue/falseで書いてしまうのが正しい。
それでラッパ内で自動的にtrueを"1"、falseを"0"に変換させる。

逆に読み出しの場合、"1"をtrueに、"0"をfalseにするわけだが、
型あり言語の場合はこの辺、文字列の"1~"0"とは型で区別出来るが、
PHPの場合に実際どうするのかはよく知らん。
が、ともかく、DBアクセスラッパ内で逆変換してしまうのが正しい。

というかそうしないとDB変えただけで全部書き換えが必要になるだろ。
てなことは今のお前でも考えれば分かるはず。お前らは考えなさすぎ。
つっても俺の意見はプログラミングの一般論であって、
PHPなりのなんか変なノウハウがあって数字の方がいいのかどうかは分からん。

687 名前:デフォルトの名無しさん (ブーイモ MM4b-Wgo7) [2023/08/20(日) 04:33:24.24 ID:fG8Y/bhcM.net]
ワイ独学自称中級者
一連のやりとりを見て自信を無くして震える
(((( ;゚Д゚)))ガクガクブルブル



688 名前:デフォルトの名無しさん (ワッチョイ 5b5f-hPrW) mailto:sage [2023/08/20(日) 12:55:06.37 ID:4PrSYObq0.net]
>>686
>そのDBがtrue/false使えたら全部書き直すつもりなのか?

そういうDB依存、言語依存をしないために、そもそもDBに1,0をかきこむんじゃ
true/falseなんて多言語で一番共通の無い概念じゃけえの

689 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) mailto:sage [2023/08/20(日) 13:35:51.35 ID:Vn08TQPe0.net]
>>688
> 言語依存
> 多言語で
いや今はPHPでどうするかの話だろ。

そしてmariaは知らんが686の通りなら文字型しかないDBなんだろ。
そういうDBが有ってもおかしくない。DBではないがJSのlocalStorageとかそうだし。

690 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) mailto:sage [2023/08/20(日) 13:59:49.50 ID:Vn08TQPe0.net]
>>682
てか調べてみたらmariaにbooleanあるんですが?
https://mariadb.com/kb/ja/data-types/

691 名前:デフォルトの名無しさん (ワッチョイ 1301-/Wom) mailto:sage [2023/08/20(日) 14:18:19.62 ID:HzS5SUnX0.net]
Synonym for TINYINT(1)と書いてあるだろう

692 名前:デフォルトの名無しさん (スップ Sdb3-qQSq) mailto:sage [2023/08/20(日) 15:08:55.86 ID:6IMFV5dJd.net]
フラグとして変数を定義するとき、ブーリアン型を用いることがほとんどである。
ブーリアン型は「真」(フラグが立っている)および「偽」(フラグが立っていない)のみを値として受けつけ、
都合が良いからである。

https://ja.wikipedia.org/wiki/フラグ_(コンピュータ)

「1|0」でなく「true|false」を使うことに有用性はありますか?
https://teratail.com/questions/307035

693 名前:デフォルトの名無しさん (ワッチョイ 2b63-/QKx) mailto:sage [2023/08/20(日) 15:10:00.51 ID:GxzweHHZ0.net]
TINYINTには、0と1以外の値も入る

694 名前:デフォルトの名無しさん (スップ Sdf3-CvT1) mailto:sage [2023/08/20(日) 16:20:48.91 ID:ssGBE3vxd.net]
MySQLのtinyint(1)って1ビットってことだから0か1になるんじゃ?

登録するまでに型変換だのなんだのするの個人的には嫌だからtrue falseで良いと思うけど

695 名前:686 (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/20(日) 17:51:30.99 ID:fCXPEraA0.net]
すいません、間違えていました
>mariadbはtrue, falseのboolで保存できないので、結局取り出すときは

誤:1と0の文字列になるけど
正:結局取り出すときは1と0の数値になるけど

です。tinyint(1)なので数字の1と0です。
最悪なところ書き間違えていました・・・
phpしか使わないので

チェックボックスのvalue=1をintvalにしてdbに入れる
確認画面とかで評価するときは===1で厳密に評価するのが初学者向きなのかな?
mariadbに入れるまではtrue,falseがdbに入れられないことに気付かなかったです。

696 名前:デフォルトの名無しさん (ワッチョイ 1301-/Wom) mailto:sage [2023/08/20(日) 18:02:22.04 ID:HzS5SUnX0.net]
>>694
tinyintは1バイト
tinyint(10)としても1バイト

>>695
DB側では数値の1と0でもドライバや設定によっては
PHP側では文字列の”1”と”0”で取得されたりするので気をつけて
PHP特有の落とし穴

697 名前:デフォルトの名無しさん (ブーイモ MMb3-wGig) mailto:sage [2023/08/20(日) 18:07:23.77 ID:5gYLv8ZUM.net]
>>696
pdo使え



698 名前:デフォルトの名無しさん (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/20(日) 18:14:41.61 ID:fCXPEraA0.net]
>>696
exucuteからforeachで$hoge = intval(row['is_hoge']);
のように取り出そうと思います、間違っていたらごめんなさい。
pdoとプレースホルダを使っています。

699 名前:デフォルトの名無しさん (オッペケ Sr0d-eja4) mailto:sage [2023/08/20(日) 21:21:03.15 ID:7sa3oVfBr.net]
これだからphpは欠陥言語なんだよな
他の言語じゃ起こり得ないことがphpでは当たり前のように起こる

700 名前:デフォルトの名無しさん (スップ Sdb3-qQSq) mailto:sage [2023/08/20(日) 21:37:23.85 ID:6IMFV5dJd.net]
phpMyAdminだとBOOLEANは、NUMERICのカテゴリで数値扱い
上にもある通りtinyint(1)とされる
型をBOOLEANに設定してデフォルト値をtrueにしても、結局は1と表示される

701 名前:デフォルトの名無しさん (スップ Sdb3-qQSq) mailto:sage [2023/08/20(日) 21:50:07.54 ID:6IMFV5dJd.net]
>>682
正統なやり方はこうするのかもね

trueかfalseの論理型として扱う
INSERTをする前に値をboolvalする
SELECTをした後に値をboolvalする

PHPの内部ではbool型として扱い、厳密な比較をする

702 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) [2023/08/20(日) 22:44:11.23 ID:Vn08TQPe0.net]
>>699
PHPがってわけではなく、型無し言語なのが問題なのだが、
PHPerが上達してない原因はこの辺なのか、とは思ったね。
型あり言語だと悩む必要もなく、コードも必要なく、true/falseが使える状況だからね。

703 名前:デフォルトの名無しさん (ワッチョイ 1301-/Wom) mailto:sage [2023/08/20(日) 22:47:18.44 ID:HzS5SUnX0.net]
>>697
数値を文字列で返して長らく平気な顔してたのは
まさにそのPDOさんなんですけどねw

704 名前:デフォルトの名無しさん (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/21(月) 00:15:50.88 ID:lueNEGoD0.net]
え?pdoってデータベースのカラムを取ったとき、そのカラムの型じゃないの?
てっきり入っている型のまま変数に入ってると思ってた

705 名前:デフォルトの名無しさん (ワッチョイ 2b63-/QKx) mailto:sage [2023/08/21(月) 00:21:37.41 ID:EVtKvg8p0.net]
データーベースサーバーとのやり取りは文字列の方がやりやすくないか?

706 名前:デフォルトの名無しさん (オッペケ Sr0d-Uf20) mailto:sage [2023/08/21(月) 08:08:10.49 ID:dxSskb/Zr.net]
データベースを意識しない場所ならtrue/falseにするね
そういう風に出来るから

707 名前:デフォルトの名無しさん (ワッチョイ 59a7-0WDc) mailto:sage [2023/08/21(月) 14:47:43.04 ID:tiKxyOXL0.net]
>>702
おんぶにだっこな生ぬるい型あり言語と違って
悩んで正解を見つける能力がPHPerには備わっているはずなんです



708 名前:デフォルトの名無しさん (スップ Sdb3-CvT1) mailto:sage [2023/08/21(月) 16:06:41.44 ID:YnwB8X1pd.net]
プログラム言語の歴史としてなぜ型なしが流行っちゃったの?

709 名前:デフォルトの名無しさん (ワッチョイ 7101-QMpP) mailto:sage [2023/08/22(火) 14:21:40.44 ID:TUFRZPBf0.net]
型なしは流行るし、
voidで自動型宣言なるし、
楽になったのか、間違いを増やしたのか
わからんなー

710 名前:デフォルトの名無しさん (ワッチョイ 2b63-/QKx) mailto:sage [2023/08/22(火) 14:56:09.51 ID:pwoAZKv30.net]
C++だと any なんて型というかクラスがあるんだよな

711 名前:デフォルトの名無しさん (ワッチョイ d95f-lN7b) mailto:sage [2023/08/29(火) 11:57:24.32 ID:MQh5oOBF0.net]
オブジェクト指向ってサブルーチンみたいなものでつか?

712 名前:デフォルトの名無しさん (テテンテンテン MMde-QSEj) [2023/08/29(火) 13:22:07.40 ID:vhEPFWr5M.net]
全然違います
車に例えた例で学んでください

713 名前:デフォルトの名無しさん (アウアウウー Sa11-VnR5) mailto:sage [2023/08/29(火) 13:29:22.50 ID:ud/hz0aHa.net]
本気で言ってるとは思わないが
「型無し言語」と言われているものはホントに型が無い訳じゃないからな

714 名前:デフォルトの名無しさん (ワッチョイ a9a7-vHpx) mailto:sage [2023/08/30(水) 00:27:17.06 ID:HAfLNzeH0.net]
オブジェクトの持つ振る舞い=メソッドを記述するのにサブルーチン(PHPの場合関数という)を使うが
それイコールオブジェクト指向みたいな単純な話じゃないから
ここで説明するのは難しい話だし到底理解出来ないと思うから勉強してくれとしか言いようがないね

715 名前:デフォルトの名無しさん (スップ Sdea-KdZ8) mailto:sage [2023/08/30(水) 22:39:46.76 ID:6rYffRE+d.net]
オブジェクト指向の習得ならJavaの基礎やってから
デザインパターンの学習がおすすめ
回り道だけどPHPにも役立つ

716 名前:デフォルトの名無しさん (アウアウウー Sa11-FmU/) mailto:sage [2023/08/31(木) 06:13:11.51 ID:3AELC/LBa.net]
オブジェクト指向は、Ruby

さらに、メソッドチェーンで関数型っぽく書ける

717 名前:デフォルトの名無しさん (ワッチョイ caa9-1lN6) mailto:sage [2023/08/31(木) 06:52:40.61 ID:iJCUhZwo0.net]
クラスがまだ理解できないわ
ユーザ関数をまとめた塊が分身の術を使う感じ?

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



718 名前:デフォルトの名無しさん (ワッチョイ 4abd-QSEj) [2023/08/31(木) 09:48:57.13 ID:FDRwTnoH0.net]
無理して使わなくても良い
単純なお問い合わせフォームなら不要だね

719 名前:デフォルトの名無しさん (スフッ Sdea-v2/v) [2023/08/31(木) 09:57:25.50 ID:dkvwQp2/d.net]
PHPは出生が貧しい

720 名前:デフォルトの名無しさん (ワッチョイ c149-mWiY) mailto:sage [2023/08/31(木) 10:22:39.01 ID:ByL0JcT30.net]
Laravelのサンプルでも見てチュートリアルとかこなしてなんか作ってれば、
そのうち分かってるよ

721 名前:デフォルトの名無しさん (ワッチョイ 355f-oH/7) mailto:sage [2023/08/31(木) 12:57:53.71 ID:b45Q9Hkb0.net]
管理や使いまわしがしやすいように作るひな形だからね

オブジェクトの変数と関数を定義したひな形

722 名前:デフォルトの名無しさん (ワッチョイ 8663-JwXX) [2023/08/31(木) 22:18:55.37 ID:WloaiZHG0.net]
javascript のlocation.href やlocation.replace をPHPで書きたいのですがうkpまく検索できないのでググるときのキーワードだけでも教えて欲しいです

723 名前:デフォルトの名無しさん (ワッチョイ d67c-9TAE) mailto:sage [2023/08/31(木) 22:24:38.53 ID:tdunP8yV0.net]
header関数

724 名前:デフォルトの名無しさん (ワッチョイ 8663-JwXX) [2023/08/31(木) 22:30:55.24 ID:WloaiZHG0.net]
ありがとうございます😭
出てきました。ちなsmartyだとこうですよね
{php} header ('Location: somepage.php'); {/php}

725 名前:デフォルトの名無しさん (ワッチョイ fe5f-TDjq) mailto:sage [2023/08/31(木) 22:32:04.49 ID:FVCzIIes0.net]
smartyってまだ使われてるんだね
これからも頑張って

726 名前:デフォルトの名無しさん (ワッチョイ 8663-JwXX) [2023/08/31(木) 22:53:46.94 ID:WloaiZHG0.net]
ありがとうございます😊

727 名前:デフォルトの名無しさん (ワッチョイ 9d90-NK/z) mailto:sage [2023/09/01(金) 12:50:01.84 ID:CI/feD+E0.net]
ごめんなさい、知恵をお貸しください。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回は動いているのでしょうか。
それともおま環でしょうか。
なにか解決策があるならご教授お願いしたく思います。
よろしくお願いします。



728 名前:デフォルトの名無しさん (ワッチョイ c149-TDjq) [2023/09/01(金) 14:02:31.58 ID:1IEXqOVA0.net]
Bardに訊いといた(ChatGPTがエラー履いて動かない

https://bard.google.com/share/d8125bab3ab9

729 名前:デフォルトの名無しさん (ワッチョイ 4abd-QSEj) [2023/09/01(金) 14:11:47.16 ID:BMZCfruh0.net]
答える前に日本語の解読が大変

730 名前:デフォルトの名無しさん (ワッチョイ 9d90-NK/z) mailto:sage [2023/09/01(金) 14:19:15.56 ID:CI/feD+E0.net]
>>728
ありがとう。
本環境では$st初期化はforeachの外にあります。
本来DBの内容から1回しか処理しないハズでしたが、動作がオカシイのであえて$stを組んだのですがそれでもダメでした。
foreach外でsetcookieは1回しか動かないはずが、foreach内のループで得られたであろうデータをなぜか取得しcookieを作るので
おま環説も疑ってます。

>>729
ありがとう、上手く説明できなくてごめんなさい。

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

こういうのは試しに、一行ずつ超細かい数行のメソッドに分割してテストすれば整理されて分かったりするから
後で戻すにせよ、ひとつずつ丁寧に見てけよ
それか自分でChatGPTなりにコード全部はって聞いてけ
てかリーダブルコード読め

732 名前:デフォルトの名無しさん (ワッチョイ 9d90-NK/z) mailto:sage [2023/09/01(金) 16:08:01.02 ID:CI/feD+E0.net]
>>731
ありがとう。
そうですね、全体で見ないと判らないところもありますものね。
その言葉で全体を見直したら、解決しました。

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

助かりました、ありがとうございました。

733 名前:デフォルトの名無しさん (ワッチョイ b3ad-+GqY) [2023/09/02(土) 12:33:53.90 ID:ww4K2aY50.net]
お疲れ様です

PHPで

trueの場合だけの処理ってやっぱりありませんかね?

734 名前:デフォルトの名無しさん (ワッチョイ b3ad-+GqY) [2023/09/02(土) 12:34:18.26 ID:ww4K2aY50.net]
ifなしで三項演算子とかで

735 名前:デフォルトの名無しさん (ブーイモ MMe7-fPXT) mailto:sage [2023/09/02(土) 14:43:30.09 ID:vtSM1xnBM.net]
>>734
switch文を使う方法があります。
trueだけの場合、条件式をtrueにして、defaultを使います。

736 名前:デフォルトの名無しさん (ワッチョイ ffa9-djYJ) mailto:sage [2023/09/02(土) 17:09:18.51 ID:py0xcZf30.net]
三項演算子を初めて知ったとき、1行で終わるスマートさに感動したわ

737 名前:デフォルトの名無しさん (ワッチョイ cf63-0HOd) [2023/09/02(土) 22:08:20.07 ID:9i23krRm0.net]
三浦恵理子



738 名前:デフォルトの名無しさん (ワッチョイ 035f-5p+d) mailto:sage [2023/09/03(日) 12:09:52.12 ID:3hgdrBDA0.net]
>>736
直感的でわかりやすいしあれはいいもんだ

739 名前:デフォルトの名無しさん (アウアウウー Sae7-fXI3) [2023/09/03(日) 13:21:40.48 ID:jFAGdbdCa.net]
>>737
webクロールか

740 名前:デフォルトの名無しさん (ワッチョイ 6f5f-ATpV) [2023/09/03(日) 17:13:18.35 ID:RZsz0MwY0.net]
PHPでもif修飾子が使いたいでゴワス

741 名前:デフォルトの名無しさん (ワッチョイ 7301-+GqY) [2023/09/08(金) 01:30:30.68 ID:EHbxHCsV0.net]
フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】

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

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

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

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

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

フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説

742 名前:デフォルトの名無しさん (ワッチョイ e7ad-6jLp) [2023/09/14(木) 16:24:24.43 ID:YnYbg3/U0.net]
【救急出動】 初の700万件突破、急病67.4%
https://egg.5ch.net/test/read.cgi/119/1693801319/l50
https://o.5ch.net/21xua.png

743 名前:デフォルトの名無しさん (ワッチョイ ffe1-r5J7) mailto:sage [2023/09/22(金) 03:31:40.72 ID:DUfDR45n0.net]
テストに動かしてみたコードとか要らなくなったコードってきちんとした削除手順とかあるの?
普通にゴミ箱ぶっこんでええの?なんか蓄積してたり残ったりする?

744 名前:デフォルトの名無しさん (ワッチョイ ff5f-YZsW) mailto:sage [2023/09/22(金) 20:43:58.56 ID:Il2p6KDs0.net]
>>743
蓄積したりといったことはありません
そのままごみ箱に入れて大丈夫です

それよりもごみ箱のごみはひらがなです
今後は気をつけろ

745 名前:デフォルトの名無しさん (ワッチョイ 8e7c-u/s5) mailto:sage [2023/09/23(土) 13:44:37.26 ID:/3FF//Rt0.net]
>>744
ありがとうございます!

746 名前:デフォルトの名無しさん (ワッチョイ 0abd-em0E) [2023/09/29(金) 05:54:25.82 ID:JB7cBWOL0.net]
この流れはさすがにネタだよね?

747 名前:デフォルトの名無しさん (ワッチョイ c92e-ZDOV) mailto:sage [2023/10/14(土) 18:52:32.66 ID:FXKPsXcG0.net]
>>717
>クラスがまだ理解できないわ
>ユーザ関数をまとめた塊が分身の術を使う感じ?

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

全く同じ。ユーザー定義関数との違いが理解出来ていない自分。
よくクラスを、自動車に例えたり会社に例えてる書籍読むけど分からんのよね。うーん



748 名前:sage (ワッチョイ c963-e7li) [2023/10/14(土) 23:13:33.20 ID:uhuB6VoQ0.net]
>>747
既に回答されてる通りだよ。
ただの整理術だから、無くても困らないのなら問題ないし、規模が大きくなれば嫌でも実感出来る。
そして(生の)PHPで学ぶのははっきり言って間違い。
Arrayとか、他言語ならarr.indexOf等、最初からクラスになってるので自然と使えるようになる。
最初からlaravel使った場合も同様。
生のPHPで初心者の規模(3000行以下程度)なら自然と学べる事はなく、無理に使おうとしても余計に混乱するだけ。
本が3冊しかないのに本棚買っても整理も糞もない。本立てで十分だし、そのほうが使い勝手もいい。
初心者の規模で学びたければ、他言語(JS/Go/C#/Java/Python/Rubyのどれでもいい)をやるべき。
どうしてもPHPでやりたければ、laravel使うか大型化させるしかない。

749 名前:デフォルトの名無しさん (ワッチョイ c963-e7li) mailto:sage [2023/10/14(土) 23:15:35.87 ID:uhuB6VoQ0.net]
> ユーザー定義関数との違いが理解出来ていない自分。
そもそも違いなんて無い。Goの場合は相互に運用出来るし、
C++やC#の場合はコンパイラが暗黙的に指定してくれるだけ。
一般的には「どう考えても対象を指定するしかないだろ」の場合、インスタンスメソッドにする。
例えば、
$key = array_search('green', $array); // $key = 2;
array_searchは「配列の中から探す」のであって「配列」を指定しないと話にならない。なら最初から、
$key = $array->search('green');
と書かせろや糞言語ガー、
しかもsearchでは返り値の型が分かりにくい、インデックスが返ってくるのなら、
$key = $array->indexOf('green');
と書かせろや糞言語ガー、他言語は全部こうやで、というだけ。
array_searchとかいう糞長い名前が必要なのは、名前のスコープが広すぎるからであって、
各メソッドにしてクラス毎の小さなスコープにすれば短い名前でも衝突しない。
これが便利なので使われてる。つまり、便利だ、というだけ。

750 名前:デフォルトの名無しさん (ワッチョイ c963-e7li) mailto:sage [2023/10/14(土) 23:16:34.58 ID:uhuB6VoQ0.net]
ただしPHPのも「静的メソッド」として実装する方式では合ってるし、
実際にC++の場合は(仮想関数でない場合は)静的メソッドをコンパイラ支援で呼び出してるから、バイナリ的にも同じ。
同様にC#の場合は上記静的メソッドarray_searchを拡張メソッドとして$array->search形式で
見た目簡単に書けるようにしただけで、C++と同様に同じバイナリを呼び出す。
Goの場合はインスタンスメソッドを静的メソッドとして呼びだしたら(逆だったかも?)
第一引数がthis扱いになるだけ、という、C++やC#がコンパイラにやらせてるのをユーザーも書けるようにしただけ。
要するに、普通の関数(静的メソッド)と(仮想関数でない)インスタンスメソッドには違いはない。楽に書けるだけ。
PHPの場合は(今数分見ただけだが)全部仮想関数(virtual、ただしPHPでは別の意味で使われてるが)っぽいので、
array_searchのような静的メソッドの方が呼び出しがデリファレンス1回分速いという違いはあるが、
PHPの実行速度で気にする話でもない。
そしてオーバーライドしなければ上記の(仮想関数ガー)は全部無視していい。

まあ意味不明だろうが、書き方以外の違いはないという事。
ただ再度言うが、小規模の生PHPをやってる限り、この辺が分かるようにはならないよ。

751 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 09:04:25.58 ID:6aIYZQkKa.net]
プログラムをクラスとかメソッドに分ける時の考え方の一つに「自動テストの書きやすさ」もあるよ。
作ったプログラムを今後も手を入れて改修して行くなら、一般的に改修箇所以外が正常動作するか回帰テストする。

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

今後改修しないその場限りのプログラムなら自動テストは気にしなくて良いと思う

752 名前:デフォルトの名無しさん (ワッチョイ c92e-ZDOV) mailto:sage [2023/10/15(日) 12:35:11.36 ID:XVcuYs9l0.net]
>>748 エスパーか?ってくらい自分の状況透かされてて驚きました。まさに生のPHPしか触った事なくて1ファイルMAXでも3000行くらいしか書かないです。本棚の例えも恐ろしくわかりやすいです。

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

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

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

Laravelとかフレームワーク使って簡単に何か作ってみるのが良いんだろうなぁ…頑張らねば

753 名前:デフォルトの名無しさん (ワッチョイ c92e-ZDOV) mailto:sage [2023/10/15(日) 12:47:11.76 ID:XVcuYs9l0.net]
>>751さんは別の方かな?レス有難うございます😊

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

個人事業主で頑張ってる(ユーザー定義関数だけで頑張ってる)けどこのままだと株式会社を立ち上げて規模を大きくする事が出来ない(クラスを使って大規模開発出来ない)気がしています。
変な例えで恐縮ですし例えの中の個人事業主⇆会社のどちらが良い悪いというか意味ではありません。
ただ、自分が今如実に感じている感覚を言語化するなら先述のような感覚です。

754 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 16:52:25.37 ID:BnU34f5b0.net]
>>752
> ユーザー定義関数群を取りまとめたファイルを都度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でも「次の一手」として理解出来るだろ。

755 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 16:53:05.15 ID:BnU34f5b0.net]
なんだ、接頭辞を付けて、接頭辞内では"_"禁止、或いは接頭辞を台帳で管理すれば、
つまり、きちんと管理すればアナログで解決出来るではないか、というのは事実で、当たり前なのだ。
既にそうやってアナログ管理されて動いている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
みたいに引数順序を間違えてバグる心配もないね、というだけ。
そんなのちゃんと管理すればアナログで回避出来るよね、というのは、上記の通り「クラス」の仕様だ。
だから何であれ「クラス」は無くても出来るが使った方が楽、というだけの話。

756 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 16:55:02.15 ID:BnU34f5b0.net]
> 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でクラスを学ぶよりは断然ましだし、今後の役にも立つだろうよ。

757 名前:デフォルトの名無しさん (ワッチョイ 13a9-olVp) mailto:sage [2023/10/15(日) 20:49:40.47 ID:64Sv/OQW0.net]
>>717書いた者だけど、mc963-e7li氏の言葉はなんとなくわかったような感じ
リレーショナル使わないDBのCRUDするぐらいなら無理にクラスは使わなくて良い、ということね。

php初学時にlaravelの本を読んだ時に呪文みたいなものがたくさんあって
php無理だわと思ったけど、laravel無しでなんとかログイン付のCRUDぐらいなら作れるようになった。
・ある程度コードが書けるようになったらlaravelを検討するのか
・まったくの初学者がlaravelから始めてブラックボックスになっている所は気にするな、というなら
phpしか選択肢が無いなら熟練者はどっちを勧めるんだろう



758 名前:デフォルトの名無しさん (ワッチョイ 7321-Y0aP) mailto:sage [2023/10/15(日) 21:00:20.67 ID:BAs39Kb+0.net]
個人開発にフレームワークいらないんじゃない?
昔居た会社はLaravelでいうブレードに全部の動作直書きしてたよ

759 名前:デフォルトの名無しさん mailto:sage [2023/10/16(月) 11:26:15.00 ID:oWsG313D0.net]
>>754
階層の例えめちゃくちゃ分かりやすいです、なるほどなるほど…
>>717さんと自分は別だけど「クラスの概念が理解出来ない」という点で全く同じだったので書き込んでしまいました。懇切丁寧に教えてくれて本当に感謝です🙏

>>754さんみたいな方が社内に居たら素晴らしいメンターになるのになぁと思いながらも今日もトライ&エラーで頑張ります!

760 名前:デフォルトの名無しさん mailto:sage [2023/10/16(月) 11:45:53.44 ID:Cp7DR01g0.net]
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 なら、
無料で読めるから、まずこれを読むのが最短

761 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:20:58.48 ID:R59hQw8C0.net]
>>757
小規模なら無理にクラスを使う必要はないが、
クラスを使った方が楽だし綺麗に整理出来るので、知ってれば普通は使う。

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

理解はしたが、使う意味/意義が分からないというのは初心者〜中級者がよく陥る状態で、
大体は規模が小さすぎて恩恵がほぼ無いから分からないだけ。(アナログ管理で全く困ってないだけ)
どうしても実感したければ単純には規模を大きくすればいい。
Cみたいに階層がない状況では、一人のプログラマが取り扱えるコード規模は10,000行程度とされていた。
だから10,000行を超えて頭に入りきらない状況になれば、
「この部分はブラックボックスとして切り出し、動くものとして使いたい」という欲求が出てくる。
API/モジュール/クラス等、切り出し方は色々あるが、
お手軽に同一コード内で切り出すのならクラスが便利なのでみんなそうしてるだけ。
ただPHPならRESTにして鯖を細切れにする事も簡単なので、
こちらを選択して各APIを3,000行程度に抑えれば、オブジェクト指向を一生理解せず無視する事も可能だろう。

762 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:21:42.72 ID:R59hQw8C0.net]
ただまあそれ以前にPHPはオブジェクト指向には向いてない。
継承の旨味を引き出すには抽象クラスのメソッドで記述する必要があるのだが、
Web周りはオブジェクト指向前提で整備されてないのでだいたいこれが不可能だ。
ここら辺が最初から全てオブジェクト指向前提で設計されてる.NETとかとは違う。
次にPHPの場合は状態保存が出来ない。
オブジェクト指向は各インスタンスに「状態を分散して配置する」ことになるため、
これらを最終的にDBに書き戻すには余分なコードが必要となってしまう。
ここら辺がサーバーが永続的なJS/Go/Rustとは違ってくる。
だからPHPの場合はDBから読み出してこねくり回して吐き出すだけ、
何かあったらDBを更新するだけ、という非常に単純な構造にしかならないわけだが、
実際はこの方がいいので、この点はPHPのショボさが功を奏してる。
Javaの開発工数とか、同様のWebサービスと比べて10倍以上はかかってるだろ。
あれはそもそもオブジェクト指向の「状態を分散して配置する」事自体が間違いな事に気づいてないんだよ。
Javaの連中はJavaこそが大正義であって他はまるで知らない浦島太郎だからあんな事になる。

763 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:23:34.74 ID:R59hQw8C0.net]
> ・ある程度コードが書けるようになったらlaravelを検討するのか
> ・まったくの初学者がlaravelから始めてブラックボックスになっている所は気にするな、というなら
どっちもありだと思うが、そもそも前提が間違ってる。
フレームワークはステップアップではなく、単純に「楽をする為」に導入するものだ。
よく言われてる、「フレームワークを使わなくても、
フレームワーク内に存在するコードとほぼ同じ物を書くハメになるだけだから、さっさと使え」というのは当たってる。
だからフレームワークのドキュメントをさらっと見て、
自分が使いたい機能が有れば使えばいいし、無ければ使わなければいいだけ。
初心者だから止めとけとか、そういう類の話ではない。
実際、C#やJavaではフレームワークを使わない選択肢はなく、
ハロワで既にフレームワークを使ってるはずだが、特に問題にもなってない。
そして使う場合は基本的にブラックボックス扱いだ。
内部まで確認してたらキリがないので、問題なければ内部コードなんて確認しない。
それは気持ち悪い、というのなら、フレームワーク使わずに自分で組め、でしかない。
(自分で組むよりはフレームワークを内部コード精査後にホワイトボックスとして使うなり、
フレームワーク内のコードを基本パクって改変してオレオレ仕様にしたりする方がバグはないだろうが、
一般的にはこの方式の所はあまり無いのではないかと。
フレームワークのバグを心配するなら、アナログに「枯れた機能だけを使う」で対処した方がいい)

764 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:24:30.33 ID:R59hQw8C0.net]
この辺はPHP界隈でたまにいる「DBでなく、ファイルでやりたいんですけど…」が分かりやすいだろう。
この場合本人は既にプログラミングはそこそこ出来て、
欲しい物は今現在の自分で十分実装可能だと分かってる。
そしてDBの知識が十分でなく、勉強するのが面倒か、慣れてない物を使うのは危険だと判断してる。
だから自前でファイルから変数を切り出すルーチンを書くわけだ。その方が自信が持てるから。
ただ当たり前だが、同様のコードはDB内には既に存在してて、そいつが書くよりも100倍品質もいい。
そして何だかんだで仕様は肥大化し、
その都度そいつのオレオレファイルDBモドキにもコードが書き加えられていくわけだが、
最終的に、「で?お前はこれに延べ何時間費やしたわけ?それで出来上がったのがこのウンコなDBモドキ?
なら最初からSQL勉強してDB使った方が堅牢で拡張性もあって速度も速いし、工数もかからなかったよね」にしかならない。
(そもそもDB内のコードなんてPHPerは誰も読んでないしブラックボックスだが気にしてないだろ)

だから考えるべきは「今」ではなく「最終状態」であって、
仮にお前の思惑通り事が運んだとして、最終的にどこまでやるつもりなのか?なんだよ。
最終的にも数行読めれば十分ならファイルで構わないが、
最終的にはDBが必要になるのなら、最初からDBで組んだ方がいい。
同様に、最終的にフレームワークが必要となるなら、最初からフレームワークを使うべき。
よく言われてるのは「セッション管理を自前でやるとだいたいバグるからフレームワーク使え」で、
逆に言えばセッション管理を厳密にやる必要がなく、特に欲しい機能もなければ、フレームワークを使う必要がない。
繰り返すがこれは「今」ではない。
つまり、「『今は』初心者だから」「『今は』フレームワークに慣れてないから」
「『今は』DBを知らないから」「『今は』クラスの理解が足りてないから」ではなく、
今、知識/技術が有ろうが無かろうが、最終的に必要なら使って慣れるしかないんだよ。

765 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:26:52.67 ID:R59hQw8C0.net]
多分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/エッセイ/プログラミング言語は複数習得すべき/

766 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:28:15.91 ID:R59hQw8C0.net]
フルスタック(キリッ、の通り、クライアントサイドで何がどこまで出来るかを把握しておく事は全体最適化には必須。
達人である必要はないが、どれくらい手間なのか分からないのは不味い。
クラスは難しいものではなく、使ってないから分からないだけ。
強制的に使うのなら標準がクラスで構成されてる言語がいい。(今のメジャー言語は全部該当するが)
PHPの次はJSだろうよ。
なおPHPの場合は節操なく取り込んでるので結果的に「全部入り」に近く、
PHPだけで学ぶのも理論的には可能だが、そもそも知らない奴が正しい方向性を見切るのは無理なので、現実的に無理だ。
PHPでは今まで通りのコードを書きつつ、JSで色々試し、
クラスに慣れたらPHPでもクラスを使って書いていく、というのが多分妥当な道筋。

767 名前:デフォルトの名無しさん (スッップ Sd33-Y0aP) mailto:sage [2023/10/17(火) 11:52:24.20 ID:nEN1t9hTd.net]
Laravelでコーディングする時、コーディングする順序は
1、SQL等のDB周り
2、バックエンド動かすコントローラー(api.phpの方)
3、フロント用のコントローラー(web.phpの方)
4、view

って順序でイメージあってる?



768 名前:デフォルトの名無しさん (ワッチョイ 0149-HvQf) mailto:sage [2023/10/17(火) 16:33:35.10 ID:wBPhMFC20.net]
好きなとこからやれ
決まってるところからやれ
仕事なら会社の言う通りにしろ

769 名前:デフォルトの名無しさん [2023/10/21(土) 01:03:11.56 ID:dh9vzKli0.net]
PHPが遅いってのは分かるが、絶望的に遅いか?って言われたらそうは思わんな
スーパーに買い物に行くのにスポーツカーは必要ないし、むしろ使いにくい
小回りのきく軽自動車で十分って状況も多々ある






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<381KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef