web-dev-qa-db-ja.com

なぜオブジェクト指向PHP mysqliで手続き型アプローチよりも優れているのですか?

私は最近までmysql *で手続き型アプローチを使用してきました。次に、mysqliおよびオブジェクト指向のアプローチに移行したいと思います。多くのオンラインリソースや書籍には、PHPの場合でもOOPが手続き型よりも優れていることが記載されています。オブジェクト指向のアプローチが優れている理由を知りたいのですが、これはOO php Webページをコーディングする正しい方法ですか?

オブジェクト指向のアプローチ

$Host = "localhost";
$username = "root";
$password = "";
$dbname = "compdb";

@ $db = new mysqli($Host, $username, $password, $dbname);

if(mysqli_connect_errno())
{
    die("Connection could not be established");
}

$query = "SELECT company_id FROM company_basic_details WHERE company_name = 'ABC'";
$result = $db->query($query);

$total_num_rows = $result->num_rows;

echo "The Results Are : <br>";

while($row = $result->fetch_array())
{
    echo $row['company_id'];
}
?>

手続き的アプローチ

<?php

$Host = "localhost";
$username = "root";
$password = "";
$dbname = "compdb";

@ $db = mysqli_connect($Host, $username, $password, $dbname);

if(mysqli_connect_errno())
{
    die("Connection could not be established");
}

$query = "SELECT company_id FROM company_basic_details WHERE company_name = 'ABC'";
$result = mysqli_query($db, $query);

$total_num_rows = mysqli_num_rows($result);

echo "The Results Are : <br>";

while($row = mysqli_fetch_array($result))
{
    echo $row['company_id'];
}
?>
27
Stacy J

主な理由は、PHPがOOプログラミングの方向に着実に動いていることです。

同等のOOPではなくmysqli_xxx()関数を使用しても問題はありません。コードに関する限り、まったく同じです。

唯一の問題は、よく書かれたPHPコードとして人々がどう思うかという点で、あなたが自分自身をますます背後に追い込んでいるということです。

PHPのほとんどのDBコードにとって理想的なPDOライブラリはOOP専用であることは注目に値します。手続き型インターフェースはありません。また、最近のいくつかのバージョンでPHPに追加された他のほとんどの新機能もありません。 PHPを最大限に使いたい場合は、とにかくOOPを知る必要があります。

DBの拡張クラスを作成する機能についてもポイントがあります。次のようなものです。

_class myDB extends mysqli {
     .... your own stuff here to extend and improve the base mysqli class
}
_

もちろん、手続き型コードでも同じことを実現できますが、OOPの方法ほどきれいではありません。もちろん、実際にクラスを拡張したい場合にのみ関係します。

ただし、最初のステップとして、mysql_xxx()からmysqli_xxx()に移行するだけで十分です。 OOPインターフェースを使用する方法全体に移行することはさらに良いことですが、mysqli関数に切り替えることは良いスタートです。

手続き型のインターフェイスを使用すると、古いmysql_xx()関数からの移行が確実に簡単になります。したがって、OOPインターフェイスへの切り替えが最初の段階で大きく跳ね上がった場合は、ドンすべてを一度に行う必要はありません。手続き型mysqli関数への変換から始めて、後でOOPメソッドに切り替えます。どちらのジャンプもそれ自体ではそれほど大きくありません。

32
SDC