ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 简介 服务数据对象(SDO)使PHP应用程序可以使用单个界面处理来自不同源(例如数据库查询,XML文件和电子表格)的数据。 每种不同类型的数据源都需要数据访问服务(DAS)来提供对数据源中数据的访问。在PHP应用程序中,使用DAS创建一个SDO实例,该实例表示数据源中的某些数据。然后,您可以使用标准SDO接口在SDO实例中设置和获取值。最后,您使用DAS将修改后的数据写回到数据源,通常是同一数据源。 有关当前可用[数据](https://www.php.net/manual/en/ref.sdo.php#sdo.das.table)的详细信息,请参见[数据访问服务列表](https://www.php.net/manual/en/ref.sdo.php#sdo.das.table)。除了提供的DAS之外,SDO还提供接口以实现其他[接口(](https://www.php.net/manual/en/ref.sdo.php#sdo.class.sdo-das-spis)有关更多详细信息,请参见[SDO数据访问服务接口](https://www.php.net/manual/en/ref.sdo.php#sdo.class.sdo-das-spis)部分)。 此扩展源自[»服务数据对象规范»中的](https://www.jcp.org/en/jsr/detail?id=235)概念。它包括[»Apache Tuscany](http://tuscany.apache.org/)SDO for C ++项目的版本。 ## 服务数据对象的结构 服务数据对象实例由数据对象树组成。该树由数据对象之间的包含关系定义。例如,公司数据对象可能包含多个部门数据对象,因此公司将与部门具有围堵关系。 SDO在树中的数据对象之间也可能具有非包含引用。例如,一个Employee数据对象可能引用另一个Employee来标识职业指导者。 除了彼此引用的数据对象外,它们还可以具有原始属性。例如,公司数据对象可能具有字符串类型的名为“名称”的属性,用于保存公司名称(例如“ Acme”)。 数据对象的这些属性(包含关系,非包含引用或原始属性)中的每一个都可以是多值或单值。在上面的示例中,部门是多值的,而公司名称是单值的。 在PHP中,每个SDO数据对象都表示为一个PHP对象。可以使用对象语法或关联数组语法访问数据对象的属性。我们稍后将看到一些示例。 需求: SDO扩展要求PHP 5.1.0或更高版本。它还需要libxml2库。通常,已经安装了libxml2,但如果没有安装,则可以从[»http://www.xmlsoft.org/](http://www.xmlsoft.org/)下载 下载:[https://pecl.php.net/package/sca\_sdo](https://pecl.php.net/package/sca_sdo) * [SDO\_DAS\_ChangeSummary :: beginLogging](https://www.php.net/manual/en/sdo-das-changesummary.beginlogging.php)—开始更改日志记录 * [SDO\_DAS\_ChangeSummary :: endLogging](https://www.php.net/manual/en/sdo-das-changesummary.endlogging.php)—结束更改记录 * [SDO\_DAS\_ChangeSummary :: getChangeType](https://www.php.net/manual/en/sdo-das-changesummary.getchangetype.php)—获取对SDO\_DataObject所做的更改的类型 * [SDO\_DAS\_ChangeSummary :: getChangedDataObjects](https://www.php.net/manual/en/sdo-das-changesummary.getchangeddataobjects.php)—从更改摘要中获取更改的数据对象 * [SDO\_DAS\_ChangeSummary :: getOldContainer](https://www.php.net/manual/en/sdo-das-changesummary.getoldcontainer.php)—获取已删除SDO\_DataObject的旧容器 * [SDO\_DAS\_ChangeSummary :: getOldValues](https://www.php.net/manual/en/sdo-das-changesummary.getoldvalues.php)—获取给定的已更改SDO\_DataObject的旧值 * [SDO\_DAS\_ChangeSummary :: isLogging](https://www.php.net/manual/en/sdo-das-changesummary.islogging.php)—测试以查看更改日志记录是否已打开 * [SDO\_DAS\_DataFactory :: addPropertyToType](https://www.php.net/manual/en/sdo-das-datafactory.addpropertytotype.php)—将属性添加到类型 * [SDO\_DAS\_DataFactory :: addType](https://www.php.net/manual/en/sdo-das-datafactory.addtype.php)—向模型添加新类型 * [SDO\_DAS\_DataFactory :: getDataFactory](https://www.php.net/manual/en/sdo-das-datafactory.getdatafactory.php)—获取数据工厂实例 * [SDO\_DAS\_DataObject :: getChangeSummary](https://www.php.net/manual/en/sdo-das-dataobject.getchangesummary.php)—获取数据对象的更改摘要 * [SDO\_DAS\_Setting :: getListIndex](https://www.php.net/manual/en/sdo-das-setting.getlistindex.php)—获取已更改的多值属性的列表索引 * [SDO\_DAS\_Setting :: getPropertyIndex](https://www.php.net/manual/en/sdo-das-setting.getpropertyindex.php)—获取已更改属性的属性索引 * [SDO\_DAS\_Setting :: getPropertyName](https://www.php.net/manual/en/sdo-das-setting.getpropertyname.php)—获取已更改属性的属性名称 * [SDO\_DAS\_Setting :: getValue](https://www.php.net/manual/en/sdo-das-setting.getvalue.php)—获取已更改属性的旧值 * [SDO\_DAS\_Setting :: isSet](https://www.php.net/manual/en/sdo-das-setting.isset.php)—测试在修改属性之前是否设置了属性 * [SDO\_DataFactory :: create](https://www.php.net/manual/en/sdo-datafactory.create.php)—创建一个SDO\_DataObject * [SDO\_DataObject :: clear](https://www.php.net/manual/en/sdo-dataobject.clear.php)—清除SDO\_DataObject的属性 * [SDO\_DataObject :: createDataObject](https://www.php.net/manual/en/sdo-dataobject.createdataobject.php)—创建一个子SDO\_DataObject * [SDO\_DataObject :: getContainer](https://www.php.net/manual/en/sdo-dataobject.getcontainer.php)—获取数据对象的容器 * [SDO\_DataObject :: getSequence](https://www.php.net/manual/en/sdo-dataobject.getsequence.php)—获取数据对象的序列 * [SDO\_DataObject :: getTypeName](https://www.php.net/manual/en/sdo-dataobject.gettypename.php)—返回数据对象的类型的名称 * [SDO\_DataObject :: getTypeNamespaceURI](https://www.php.net/manual/en/sdo-dataobject.gettypenamespaceuri.php)—返回数据对象类型的名称空间URI * [SDO\_Exception :: getCause](https://www.php.net/manual/en/sdo-exception.getcause.php)—获取异常原因 * [SDO\_List :: insert](https://www.php.net/manual/en/sdo-list.insert.php)—插入列表 * [SDO\_Model\_Property :: getContainingType](https://www.php.net/manual/en/sdo-model-property.getcontainingtype.php)—获取包含此属性的SDO\_Model\_Type * [SDO\_Model\_Property :: getDefault](https://www.php.net/manual/en/sdo-model-property.getdefault.php)—获取属性的默认值 * [SDO\_Model\_Property :: getName](https://www.php.net/manual/en/sdo-model-property.getname.php)—获取SDO\_Model\_Property的名称 * [SDO\_Model\_Property :: getType](https://www.php.net/manual/en/sdo-model-property.gettype.php)—获取属性的SDO\_Model\_Type * [SDO\_Model\_Property :: isContainment](https://www.php.net/manual/en/sdo-model-property.iscontainment.php)—测试以查看属性是否定义了包含关系 * [SDO\_Model\_Property :: isMany](https://www.php.net/manual/en/sdo-model-property.ismany.php)—测试以查看该属性是否为多值 * [SDO\_Model\_ReflectionDataObject :: \_\_ construct](https://www.php.net/manual/en/sdo-model-reflectiondataobject.construct.php)—构造一个SDO\_Model\_ReflectionDataObject * [SDO\_Model\_ReflectionDataObject :: export](https://www.php.net/manual/en/sdo-model-reflectiondataobject.export.php)—获取描述SDO\_DataObject的字符串 * [SDO\_Model\_ReflectionDataObject :: getContainmentProperty](https://www.php.net/manual/en/sdo-model-reflectiondataobject.getcontainmentproperty.php)—获取定义与数据对象的包含关系的属性 * [SDO\_Model\_ReflectionDataObject :: getInstanceProperties](https://www.php.net/manual/en/sdo-model-reflectiondataobject.getinstanceproperties.php)—获取SDO\_DataObject的实例属性 * [SDO\_Model\_ReflectionDataObject :: getType](https://www.php.net/manual/en/sdo-model-reflectiondataobject.gettype.php)—获取SDO\_DataObject的SDO\_Model\_Type * [SDO\_Model\_Type :: getBaseType](https://www.php.net/manual/en/sdo-model-type.getbasetype.php)—获取此类型的基本类型 * [SDO\_Model\_Type :: getName](https://www.php.net/manual/en/sdo-model-type.getname.php)—获取类型的名称 * [SDO\_Model\_Type :: getNamespaceURI](https://www.php.net/manual/en/sdo-model-type.getnamespaceuri.php)—获取类型的名称空间URI * [SDO\_Model\_Type :: getProperty](https://www.php.net/manual/en/sdo-model-type.getproperties.php)—获取为类型定义的SDO\_Model\_Property对象 * [SDO\_Model\_Type :: getProperty](https://www.php.net/manual/en/sdo-model-type.getproperty.php)—获取类型的SDO\_Model\_Property * [SDO\_Model\_Type :: isAbstractType](https://www.php.net/manual/en/sdo-model-type.isabstracttype.php)—测试以查看此SDO\_Model\_Type是否为抽象数据类型 * [SDO\_Model\_Type :: isDataType](https://www.php.net/manual/en/sdo-model-type.isdatatype.php)—测试以查看此SDO\_Model\_Type是否为原始数据类型 * [SDO\_Model\_Type :: isInstance](https://www.php.net/manual/en/sdo-model-type.isinstance.php)—测试作为此SDO\_Model\_Type的实例的SDO\_DataObject * [SDO\_Model\_Type :: isOpenType](https://www.php.net/manual/en/sdo-model-type.isopentype.php)—测试此类型是否为开放类型 * [SDO\_Model\_Type :: isSequencedType](https://www.php.net/manual/en/sdo-model-type.issequencedtype.php)—测试以查看这是否是有序列的类型 * [SDO\_Sequence :: getProperty](https://www.php.net/manual/en/sdo-sequence.getproperty.php)—返回指定序列索引的属性 * [SDO\_Sequence :: insert](https://www.php.net/manual/en/sdo-sequence.insert.php)—插入序列 * [SDO\_Sequence :: move](https://www.php.net/manual/en/sdo-sequence.move.php)—将项目移动到另一个序列位置