0

方法 1

  global $database;
  $user = new stdClass;
  $user->id = NULL;
  $user->name = $name;
  $user->username = $username;

  if (!$database->insertObject( '#__users', $user, 'id' )) {
    echo $database->stderr();
    return false;
  }

  return $user->id;

方法 2

  $db = JFactory::getDBO();     
  $query = $db->getQuery(true);
  $query->insert($db->nameQuote('#__users'));
  $query->set($db->nameQuote('name').'='.$db->quote($$name).','.
  $db->nameQuote('username').'='.$db->quote($username));     
  $db->setQuery( $query );
  $db->query();
  $new_id = $db->insertId();

私は Joomla を使用しており、上記の両方のクエリを使用して作業を完了させています。私の問題は、方法 1 と方法 2 の違いは何ですか? 業界標準は?上記の方法を使用する必要がある特定の状況はありますか? どちらが優れているのか、その理由は?

ありがとう

4

1 に答える 1

2

方法 1 (M1) と方法 2 (M2) は両方とも有効な Joomla! 2.5 メカニズムでは、M1 は半自動化された方法を使用し、オブジェクトを既に操作している場合におそらくより一般的に使用されます。

M2 は明らかにより具体的な一連のステップですが、どちらもJDatabaseet によって提供される抽象化で機能します。アル。データベースサーバーからあなたを隔離します。

M1 は、Joomla 全体で (文字通り) いくつかの場所でしか使用されていません。/libararies/joomla/database/M2が広く使用されている間の2.5インストール(カウントしない)

唯一の奇妙な点は、通常はJoomlaglobalであるM1での a の使用です。コーディング標準はグローバルの使用を避け、代わりに OOP またはファクトリ パターンを使用することを好みます。したがって、次のようなものです。

$database = JFactory::getDBO();

参照を使用する代わりにglobal

于 2012-10-24T06:22:47.997 に答える