これは何度か議論されるかもしれませんが、OOPがどのようにコードを改善するのかを知りたいと思います。 私は手続き的な方法でコードを覚えました。しかし、合理的な論理です。プロジェクト全体で使用されているコードは、関数にラップされています。しかし、すべての関数は大きなfunctions.phpファイルに入れられます(これはあまり効率的ではありません)。 は、たとえば、これは売上高は有効期限が切れているかいないかどうかをチェックする機能です。php - OOPでコードを改善する方法
function is_sales_expired($salesId, PDO $conn) {
$now=time();
$sql="SELECT * FROM specialoffers WHERE id=:id";
$st=$conn->prepare($sql);
$st->bindvalue(":id",$salesId,PDO::PARAM_STR);
$st->execute();
$sales_array=$st->fetchAll();
if($now<$sales_array[0]['finishdate'] && $now>$sales_array[0]['startdate']) {
return FALSE;
} else {
return TRUE;
}
}
今、アイブ氏は、OOPに移動し、OOPに私のコードを変換することを決めました。だから私はクラスを作成し、特定のビヘイビアに関連する関数を各クラスに入れました。たとえば、is_sales_expired()
の販売クラスと、販売に関連するその他のメソッドがあります。プロパティとこのようなコンストラクタを見て:
class Sales
{
private $conn;
private $stockObj;
private $userObj;
private $cartObj;
private $randomObj;
function __construct(PDO $conn)
{
$this->conn = $conn;
$this->stockObj = new Stock($this->conn);
$this->userObj = new User($this->conn);
$this->cartObj = new Cart($this->conn);
$this->randomObj = new Random($this->conn);
}
//methods come here//
}
そして私は、私は他のすべてのファイルのすべてのクラスファイルを含める必要はありませんspl_autoload_register
を使用して私のコード内のクラスをロードします。この手法では、メソッドの呼び出しが少し面倒で、すべてのメソッド呼び出しにPDO $conn
を渡す必要はなく、コンストラクタですでに渡されています。
これらはすべていいですし、関連するコードはすべて1か所にあり、管理しやすくなります。しかし、私は、OOPにもっと多くのものを提供しなければならないと感じています。私が使用したアプローチでは、私のコードがより効率的で保守的になったとは思いません。私はここでいくつかのコンセプトを欠場すべきだったと思う。 あなたの助けに感謝します。
[OOP vsプロシージャ]の可能な複製(http://stackoverflow.com/questions/552336/oop-vs-functional-programming-vs-procedural) –