タグ付けされた質問 「php」

PHPに関する質問。これは、Web開発に特に適した、広く使用されている汎用スクリプト言語です。

5
スイッチに対する複数の方法の利点
本日、上級開発者から「ちなみに、switchステートメントを使用して関数をディスパッチすることに対するあなたの反対は何か」というコードレビューを受け取りました。私は、メソッドを呼び出してスイッチを介して引数をポンピングすることは悪いOOPであり、拡張性などではないことについて多くの場所で読んでいます。これを自分自身で解決したいと思います。 競合するコードの提案を次に示します(phpは例として使用されていますが、より普遍的に適用できます)。 class Switch { public function go($arg) { switch ($arg) { case "one": echo "one\n"; break; case "two": echo "two\n"; break; case "three": echo "three\n"; break; default: throw new Exception("Unknown call: $arg"); break; } } } class Oop { public function go_one() { echo "one\n"; } public function go_two() …

5
コードで作業を行うよりもRDBMSに作業をオフロードする方が適切なのはいつですか?
さて、私はそれに対処します:私はデータベースよりも優れたコーダーであり、「ベストプラクティス」についての考えは、SQLクエリとSQLクエリで「単純な」計算を行うというテーマのどこにあるのだろうかと思っています。このMySQLの例のようなコード(私はそれを書いていません、私はそれを維持する必要があります!)-これはユーザー名と、最後のイベントの時点でのユーザーの年齢を返します。 SELECT u.username as user, IF ((DAY(max(e.date)) - DAY(u.DOB)) < 0 , TRUNCATE(((((YEAR(max(e.date))*12)+MONTH(max(e.date))) -((YEAR(u.DOB)*12)+MONTH(u.DOB)))-1)/12, 0), TRUNCATE((((YEAR(max(e.date))*12)+MONTH(max(e.date))) - ((YEAR(u.DOB)*12)+MONTH(u.DOB)))/12, 0)) AS age FROM users as u JOIN events as e ON u.id = e.uid ... コードで「重い」リフティングを行うことに比べて: クエリ: SELECT u.username, u.DOB as dob, e.event_date as edate FROM users as u JOIN events …
12 php  mysql 

3
厳密な型指定を使用する場合、docblock typehintsは冗長です
私はかなり大きなプライベートコードベースを持っていますが、これは約10年にわたって進化しています。私はphpDocumentorを使用していませんが、オープンブロックプロジェクトではdocblockセクションを使用することが標準になっているため、リポジトリ内のすべてのパブリックメソッドにもdocblockを記述することを採用しました。ほとんどのブロックには、すべてのパラメーターと戻り値の型に関する小さな説明と型ヒントが含まれています。 静的解析の登場により、これらのタイプヒントは矛盾やバグの発見に大いに役立ちました。最近、PHPのtypehintsを使用して、可能な場合はすべてのパラメーターと戻り値の型ヒントを含むように、コードベース全体(PHP7.2で実行中)を変換しました。そして今、私は疑問に思っています...これらのdocblock typehintsは冗長ではありませんか?すべてのdocblockを絶えず変化するコードと同期させ、新しい情報を追加しないため、それらを完全に削除する方が良いのではないかと思っています。 一方で、ドキュメントを削除することは、それが冗長であっても気分が悪くなります。もう1つは、既にタイプヒントが付けられている日常的なタイプヒントの繰り返し禁止の原則を破りたいという気持ちです。
12 php  comments 

4
メソッド名での接続詞の使用が悪い命名規則なのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私のチームでは、数人のソフトウェアアーキテクトと緊密に連携しています。彼らは私たちのプロジェクトのすべての設計決定を承認し、コードレビューなどを行います。 私たちのプロジェクトは、主にSymfony 2フレームワークを使用してPHPで実装されたバックエンド機能で構成されています。そのため、構文的には、コード、命名規則、およびプロジェクト構造は、Javaがどのように見えるかとほぼ同じに見えます(Symfony 2はそのような構造を推奨しています)。Java固有の規則もこのケースに適用されるため(可能であれば)、これについて言及しています。 最近、彼らは私が非常に奇妙だと思うことを提案しました:すべてのメソッドはgetEntityOrNull、例えば、setValueOrExceptionなどの名前に接続詞を持つべきです このような命名規則は私にとって非常に間違っているように感じますが、具体的な議論や、これに特に挑戦するオンラインの記事/ページを思い付くことができません。 私が思いついた唯一のものは: そのような情報は次のように、メソッドの注釈中に存在すべきです@returnか@throws メソッド名に接続詞(「and」、「or」など)を使用すると、通常、単一責任原則が適切に尊重されないことが示唆されます。 この命名規則に対する他の具体的な議論は何ですか?

2
PHPでクラスのフィールドを宣言することは実際に有害ですか?
次のコードを考えてみましょう。セッターは、過去に何度か実際に行ったプログラミングエラーのために意図的に壊れています。 <?php class TestClass { private $testField; function setField($newVal) { $testField = $newVal; // deliberately broken; should be `$this->testField = $newVal` } function getField() { return $this->testField; } } $testInstance = new TestClass(); $testInstance->setField("Hello world!"); // Actually prints nothing; getField() returns null echo $testInstance->getField(); ?> $testFieldクラスのトップで宣言したという事実は、そのプログラミングエラーを隠すのに役立ちます。フィールドを宣言していなかった場合、このスクリプトを呼び出すとエラーログに次の警告に似たものが出力されます。これは、デバッグを支援するのに役立つ可能性があります。大規模で複雑な実世界のアプリケーション: PHP Notice:未定義のプロパティ:13行目の/var/www/test.phpのTestClass :: $ …
12 php 

7
オブジェクト指向言語では、オブジェクトはいつ自分自身に対して操作を行う必要があり、いつオブジェクトに対して操作を行う必要がありますか?
Pageページレンダラーへの一連の指示を表すクラスがあるとします。そしてRenderer、画面上にページをレンダリングする方法を知っているクラスがあるとします。次の2つの異なる方法でコードを構成できます。 /* * 1) Page Uses Renderer internally, * or receives it explicitly */ $page->renderMe(); $page->renderMe($renderer); /* * 2) Page is passed to Renderer */ $renderer->renderPage($page); 各アプローチの長所と短所は何ですか?いつ良くなるのでしょうか?いつ他の方が良くなりますか? バックグラウンド もう少し背景を追加するには-同じコードで両方のアプローチを使用していることに気付きます。と呼ばれるサードパーティのPDFライブラリを使用していTCPDFます。私のコードのどこかに私が持って仕事にPDFレンダリングのため、以下を持っています: $pdf = new TCPDF(); $html = "some text"; $pdf->writeHTML($html); ページの表現を作成したいとします。次のようなPDFページスニペットをレンダリングするための指示を保持するテンプレートを作成できます。 /* * A representation of the PDF page snippet: * a …

1
3の最大多重度で原点から外側にエッジと頂点を生成するアルゴリズム
私は、宇宙が非常に大きくなる(基本的には無限に大きくなる)Webサイト用の2Dゲームを作成しています。最初は、宇宙は原点(0、0)から等しい距離にある6つの星で構成されています。私のタスクは、相互に接続する「パス」(エッジ)を持つより多くの星を生成できるようにすることです。これらの制限を満たすアルゴリズムをどのように設計できますか: 星は外側にランダムに生成されます。(たとえば、新しい星の(x、y)座標は、(0、0)からすべての方向にゆっくりと外側に移動し、できれば螺旋状になります) エッジは交差しません。 多少の違いはあるはずですが、新しい星は他の星に近すぎたり近すぎたりしてはなりません。(たとえば、最小半径が必要です) スター/ポイントの多重度が3を超えることはできません。 このすべてがデータベースに保存されることを考えると、アルゴリズムのコストが高すぎることはありません。言い換えれば、O(n)の複雑さを実現したいと考えています(これが実現可能かどうかはわかりません)。 基本的に、私が目指しているのは、星がグラフ上の点であり、星間の移動がそれらの星の間のエッジで描かれている渦巻き状の銀河です。 解決する必要がある特定の手順は次のとおりです。 まだ3の多重度を持たない他の星の近隣に点をランダムに生成します。 エッジの競合を生成しない3の多重度をまだ持たない最初の星を見つけます。 星がx単位の最小距離にある場合、2点間にエッジを作成します。 解決策を探してみましたが、数学のスキル(およびグラフ理論の知識)には多くの作業が必要です。また、この問題に関するリソース/リンクは大歓迎です。 ここに私が考えていたいくつかの擬似コードがありますが、これがうまくいくかどうかはわかりません。 newStar = randomly generated (x, y) within radius of last star from origin while(newStar has not been connected): for (star in the known universe): if(distance between newStar and star > x units): if(star has < 3 multiplicity): …

2
優れた実践における乾燥の原則?
私は、できる限り一生懸命プログラミングのDRY原則に従うようにしています。最近、私はOOPでデザインパターンを学んでいますが、結局、かなりの量を繰り返しています。 永続性を処理するために、FactoryパターンとGatewayパターンとともにRepositoryパターンを作成しました。私はアプリケーションでデータベースを使用していますが、ゲートウェイを交換して、必要に応じて別の種類の永続性に切り替えることができるはずなので、それは問題ではありません。 最終的に自分で作成した問題は、所有しているテーブルの数に対して同じオブジェクトを作成することです。たとえば、これらはテーブルを処理する必要があるオブジェクトになりますcomments。 class Comment extends Model { protected $id; protected $author; protected $text; protected $date; } class CommentFactory implements iFactory { public function createFrom(array $data) { return new Comment($data); } } class CommentGateway implements iGateway { protected $db; public function __construct(\Database $db) { $this->db = $db; } public function …

5
JSONを使用するためだけにJSONを使用する必要があります
PHP / MySQlバックエンドを使用して、学習用のブログサイトを構築しています。すべてのユーザー入力は、POST要求で送信されたフォームで処理されます。 JSONを使用することで、機能がよりクリーンになり、機能の維持や追加が容易になりますか?または、理由もなく交換フォーマットを追加するだけですか? それで、本質的に、JSONを使用することでどの機能が最もよく実装されるでしょうか?
11 php  json 

2
PHPでのローカライズ、ベストプラクティス、またはアプローチ
PHPアプリケーションをローカライズしています。同じことを達成するための最良の方法を選択することにはジレンマがあります。 方法1:現在、PHPファイルの配列にローカライズする単語を保存しています <?php $values = array ( 'welcome' => 'bienvenida' ); ?> 必要に応じて各単語を抽出して返す関数を使用しています 方法2:同じ文字列を保存するtxtファイルを使用する必要がありますか? <?php $welcome = 'bienvenida'; ?> 私の質問は、同じものを開発するための速度と労力の面で、どちらがより良い方法であり、なぜですか? 編集:2つの方法のうち、応答が速い方法を知りたいのですが、なぜそうなるのでしょうか?また、上記のコードの改善は大歓迎です!
11 php  localization 

5
私のクラスが本のクラスの階層よりも悪いのはなぜですか(初心者OOP)?
PHPオブジェクト、パターン、およびプラクティスを読んでいます。著者は大学での授業をモデル化しようとしています。目標は、レッスンタイプ(講義またはセミナー)と、レッスンが時間制レッスンか固定価格レッスンかに応じて、レッスンの料金を出力することです。したがって、出力は次のようになります Lesson charge 20. Charge type: hourly rate. Lesson type: seminar. Lesson charge 30. Charge type: fixed rate. Lesson type: lecture. 入力が次の場合: $lessons[] = new Lesson('hourly rate', 4, 'seminar'); $lessons[] = new Lesson('fixed rate', null, 'lecture'); 私はこれを書いた: class Lesson { private $chargeType; private $duration; private $lessonType; public function __construct($chargeType, $duration, …

1
PHP名前空間の評価
私は、オープンソースPHPプロジェクトのプレリリース段階にいます。これは、他の開発者が自分のプロジェクトで使用することを望んでいます。このプロジェクトは現在、名前空間をサポートしていません。名前空間を使用するべきか、Dir_Subdir_ClassのPEAR命名規則を使用するべきかを評価しようとしています。正直に言うと、簡単な選択ではありません。 名前空間に対するいくつかの考慮事項: 私のプロジェクトが、他の同様のプロジェクトよりもシンプルなAPIを提供することにより、差別化を図っている方法の1つ。名前空間は新しく、PEAR命名規則よりも複雑であるため、コードベースに名前空間を導入すると、プロジェクトの使用が簡単ではなくなります。それらを実装することで、使いやすさの点で差別化を失います。 名前空間にはいくつかの利点がありますが、PEAR命名規則を使用する最新のPHP製品で解決する必要のある問題は解決しないようです。プロジェクトの使用中に名前の競合が存在しない場合は、最小限にする必要があります。 この記事では、名前空間の実装が恒星以下であるため、名前空間の採用を一時停止しました。 また、どこにも行かないかもしれない時流に飛び乗ることをためらっています。名前空間はPHPの新機能であるため、標準になるとはまだ確信していません。 互換性。これまでに記述されたほとんどすべてのPHPコードは、新しい機能であるため名前空間を使用しません。他のライブラリは、変換なしでは互換性がありません。 名前空間を使用するためのいくつかのポイント: 知覚。名前空間が標準になり、ベストプラクティスになると、私のプロジェクトはすぐに専門家ではなく、時代遅れのものと見なされるようになります。 コンペ。競合するPHPプロジェクトの中には、最新バージョンで名前空間を使用し始めているものもありますが、多くはまだ飛躍を遂げていません。これを行うと、私のプロジェクトに他のプロジェクトの足がかりを与えることができます。 プロジェクトを公開する前ではなく、公開する前に切り替えを行うと、しばらくの間2つのバージョンをサポートする必要があるため、将来の作業は容易になります。 ベストプラクティスをサポートしたいので、名前空間がPHPのベストプラクティスになった場合、プロジェクトはそれらを使用する必要があります。 私が言えることから、あなたはどちらかの方法を選ばなければなりません。両方を行うことはできません。検討していない点はありますか?PHPのプロフェッショナルな標準になるネームスペースに向かってまたは反対することを示す客観的な兆候はありますか(フレームワークはありません)。すぐに決定する必要があるので、あなたが喜んで共有してくれるであろう洞察やリソースに感謝します。
11 php  namespace 

4
ページネーションを使用すると、サーバーの負荷が軽減されますか?(理論)
ページネーションの背後にある理由は何ですか?ページごとに返される行の量を技術的に制限するため、サーバーの負担を軽減するために使用されていますか? ページネーションなしで何かをしたかったのですが、私はこれが初めてなので(私はアマチュアです)、技術的にOKかどうか疑問に思い始めました。
11 php  pagination 

3
単体テスト作成の自動化
ユニットテストケースの作成を自動化するために使用できるいくつかの戦略は何ですか?少なくともまともなテストケーススケルトンを生成できるようにするには、各クラスでどの側面を検討する必要がありますか? 包括的な自動ソリューションは実用的ではないことがわかりますが、少なくともスケルトンを作成することで、テストの作成を少しスピードアップしたいと思います。私はコード例を探しているのではなく、おそらくどこから始めたらいいか、このようなことをした例がいくつかあるので、彼らがどのようにアプローチし、何が可能かを見ることができます。 特に、PHPで単体テストスケルトンを作成する方法に興味があります。これは、たとえば完全なタイプヒンティングなど、他の言語が提供するすべてのツールを提供するものではありません。
11 php  unit-testing 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.