Service Data Objects (SDO) を使用すると、PHP アプリケーションから (データベースクエリ・XML ファイル・スプレッドシートなどの) さまざまな形式のデータへのアクセスが 同じインターフェイスで行えるようになります。
データソースにアクセスするには、それぞれのデータソースに対応した アクセス機能を提供するデータアクセスサービス (DAS) が必要となります。 PHP アプリケーションからは、データソース内のデータを表す SDO インスタンスを作成するために DAS を使用します。そうすると、 標準的な SDO インターフェイスを使用して SDO インスタンスの データに対する読み書きができるようになります。最後に、 変更されたデータを DAS でデータソースに書き込みます。 このデータソースは、通常は最初に作成したのと同じものとなります。
現在使用可能なデータアクセスサービスの詳細は、 データアクセスサービスの一覧 を参照ください。提供されている DAS 以外にも、SDO は 他のサービスを実装するためのインターフェイスも提供しています (詳細は SDO データアクセスサービス インターフェイス を参照ください)。
この拡張モジュールは、 » Service Data Objects specification の概念に由来するものです。 » Apache Tuscany SDO for C++ project を含んでいます。
Service Data Object のインスタンスは、データオブジェクトのツリーで 構成されています。このツリーは、データオブジェクト間の閉じた関係で 定義されます。例えば、Company (会社) データオブジェクトに いくつかの Department (部署) データオブジェクトが含まれていると すると、Company が Department を包含しているということになります。
SDO では、包含関係以外の関係もデータオブジェクトのツリー内で 保持することができます。例えば、ある Employee (従業員) データオブジェクトが、上司として別の Employee を参照していることが あるかもしれません。
データオブジェクト同士がお互いを参照するだけではなく、 オブジェクト以外のプロパティを保持することもできます。 例えば、Company データオブジェクトに文字列型のプロパティ "name" を含め、そこに会社名 ("Acme" など) を格納することもできます。
これらのデータオブジェクトのプロパティ、すなわち包含関係をもつもの、 包含関係を持たないもの、そしてプリミティブなプロパティは、 ひとつの値を持つこともあれば複数の値を持つこともあります。 上の例では、Departments は複数の値をとりますが Company の name はひとつの値しかとりません。
PHP では、SDO データオブジェクトは PHP のオブジェクトとして表されます。 データオブジェクトのプロパティへは、 オブジェクト構文あるいは連想配列形式の構文でアクセスすることができます。 後でこれらの例を示します。