6

私の理解では、PHP での OOP と手続き型プログラミングの最大の利点は、関数名の分離 (一種の名前空間) です。

バージョン 5.3 以降の名前空間がある場合、どう思いますか? ほとんどの場合 (小規模から中規模の Web サイト)、高速で構造化されたコードが必要な場合は、名前空間を使用してください + 手続き型プログラミングは、定義して書き込むよりも大きな利点があります。おっと。

利点:

  • 構造化された
  • コード/開発の高速化
  • ここでも、「_」で始まる名前空間内にプライベート関数のようなものを定義できますが、それらを使用する必要がないことがわかっています。
  • 等..

コード例:

namespace User;

function setPassword ($user_id) {

    $pass = _generatePassword();

    $sql = 'UPDATE `users` SET `password` = '.escape($pass).' WHERE `user_id` = '.escape($user_id);
    $result = mysql_query($sql);


    if (mysql_affected_rows() == 1) return $sql;
    else return $sql;
}

function _generatePassword () {

    $char = '0123456789abcdefghijklmnopqrstuvwxyz';
    $str = '';
    for ($i = 1; $i <= 6; $i++) {
        $str .= $char[mt_rand(0, strlen($char))];
    }

    return $str;
}

使用法:

$user_id = 5;
User\setPassword($user_id);

意見募集中です。開発者のスタイルだけであることは知っていますが、何かが足りないかもしれません。

PS。ほとんどの場合 (小規模から中規模の Web サイト) - つまり、ほとんどが 1 回の開発であり、長期的には少し機能を改善するクライアント向けの Web サイトを作成する場合です。

4

2 に答える 2

3

あなたは OOP を間違った方法で考えています。コードと関数呼び出しを整理する 2 つの異なる方法として、OOP を手続き型名前空間と比較しようとしている場合、確かに名前空間の方が効率的であるように見えます。

OOP の利点は、関数でいっぱいのオブジェクトを編成することではありません。これは、OOP クラスを関数でいっぱいの大きな「utils」クラスとして扱うだけです。OOP の利点は組織的なものではありません。これは、プログラムを構築するまったく異なる方法であり、コードをより小さく目立たないエンティティに分割します。小さなプロジェクトであっても、すべての PHP プログラムで OOP を使用しています。

OOP の利点は、データベースにアクセスするプロジェクトを実行するときに最も明確になります (これは、今日ではほとんどすべてです)。小さなクラスを作成して各データベース テーブルをモデル化し、これらのテーブル内の情報にオブジェクトとしてアクセスします。テーブルをオブジェクトにマップする方法を定義するすべてのプロジェクトで使用するいくつかの基本クラスがあるため、mysql コマンドを再入力したり貼り付けたりする必要はもうありません。オブジェクトを使用するだけで、データベースへの挿入、更新、および削除に必要なすべての機能を継承します。

これをコードで確認することは、コードで (特にコード補完機能のある PHP ide を使用している場合) はるかに便利です。

echo "Hello, {$someDataObject->name}!";

これより:

echo "Hello, " . $row['name'] . "!";

違いはすぐにはわからないかもしれません。どちらの例も、表の列を出力するための 1 行のコードです。しかし、2 番目の例では、頭の中で列名を知っている必要があります。最初の例では、列名がプロパティとしてクラスに埋め込まれています。コード インスペクターはすべてのプロパティを認識しているため、コードを入力すると、すべてのプロパティのリストが表示されます。

クラスの維持は思ったより簡単です。選択したオブジェクト フレームワークによっては、テーブルからクラスを生成して最新の状態に保つためのスクリプトがあります。また、オブジェクト クラスを最新の状態に保つ方が、データベースの変更によってコードが壊れるよりも、エラーやバグが発生しにくいことがわかりました。列名が変更され、それらの列参照を何十か所で更新する必要があるからです。はい、検索と置換がありますが、$row['some_column'] へのすべての参照を更新するよりも、列の変更に対して 1 つのファイルを更新する方が有利だと思いますか?

これがあなたの質問に答えるのに役立つことを願っています.

于 2011-10-14T11:31:25.100 に答える
2

妥当な質問だと思います。OOP スタイルのプログラミングでは、問題領域が拡大し、コード ベースが増加するにつれて、多くのオーバーヘッドが発生する傾向があります。小規模なプロジェクトの場合、関数型または手続き型の OOP の使用に実際の違いはないと言って差し支えありませんが、その後はそうではありません。

唯一の利点ではありませんが、OOP プログラミングの教義によって宣伝されている利点の 1 つは、名前空間によって得られる利点です。また、クラスの使用を強制すると、多くの場合、別のレベルのより緊密な結合といくつかの依存関係が導入されます。ここで提案されているのは、名前空間のみを使用して手続き型コードを作成することです。これにより、より自然な方法で関数を再利用できます。

一般的なケースでより具体的にすることは困難であり、元の質問に示されている例では、言及された理由でクラスの使用を回避することの潜在的な利点の一部を明らかにしていません。

OOP スタイルを使用しないことに対するいくつかの議論は、関数型プログラミング言語の賛成論と反対論に匹敵します。ここに追加する興味深い例は、Google の担当者によって作成された比較的新しい go 言語を見ることです。これはさらに一歩進んで、独自の名前空間でパッケージを使用して、構造体やインターフェイスとは別に関数を定義できるようにします。

Google の担当者が、ここで紹介したアプローチに何らかのメリットがあると考える場合、私の考えでは、検討することはそれほど悪いことではなく、考える材料以上のものではないようです。

于 2014-01-22T12:18:47.257 に答える