Types Reference
Getting Started
Introduction ConnectionCore
Browsing Reading-writing Method-call Subscriptions History-readReference
Types Error-handling Security Architecture Extension-object-codecs Testing Events Trust-storeTypes Reference
Core Types
NodeId
Identifies a node in the OPC UA address space.
use PhpOpcua\Client\Types\NodeId;
$nodeId = NodeId::numeric(0, 85); // ns=0;i=85
$nodeId = NodeId::string(2, 'Temperature'); // ns=2;s=Temperature
$nodeId = NodeId::guid(1, '550e8400-e29b-41d4-a716-446655440000');
$nodeId = NodeId::opaque(1, 'DEADBEEF');Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$nodeId->namespaceIndex |
int |
Namespace index |
$nodeId->identifier |
int|string |
The node identifier |
$nodeId->type |
string |
'numeric', 'string', 'guid', or 'opaque' |
Methods:
| Method | Returns | Description |
|---|---|---|
isNumeric() |
bool |
True if numeric identifier |
isString() |
bool |
True if string identifier |
isGuid() |
bool |
True if GUID identifier |
isOpaque() |
bool |
True if opaque (ByteString) identifier |
getEncodingByte() |
int |
Binary protocol encoding byte |
__toString() |
string |
OPC UA string format (e.g. ns=2;i=1001) |
String format in client methods:
All public client methods that accept a NodeId parameter also accept a NodeId|string union type. Strings are parsed automatically using OPC UA notation. Invalid strings throw InvalidNodeIdException.
// These are equivalent:
$client->read(NodeId::numeric(0, 2259));
$client->read('i=2259');
$client->browse(NodeId::numeric(0, 85));
$client->browse('i=85');
$client->write(NodeId::numeric(2, 1001), 42, BuiltinType::Int32);
$client->write('ns=2;i=1001', 42, BuiltinType::Int32);Parsing and serialization:
$nodeId = NodeId::parse('ns=2;i=1001');
$nodeId = NodeId::parse('i=85'); // ns=0 implied
$nodeId = NodeId::parse('ns=2;s=MyNode');
echo (string) $nodeId; // "ns=2;i=1001"Variant
Typed value container. Wraps any OPC UA value with its type information.
use PhpOpcua\Client\Types\Variant;
use PhpOpcua\Client\Types\BuiltinType;
$v = new Variant(BuiltinType::Int32, 42);
$v = new Variant(BuiltinType::String, 'Hello');
$v = new Variant(BuiltinType::Double, 3.14);
$v = new Variant(BuiltinType::Boolean, true);
$v = new Variant(BuiltinType::DateTime, new DateTimeImmutable());
// Arrays
$v = new Variant(BuiltinType::Int32, [1, 2, 3, 4, 5]);
$v = new Variant(BuiltinType::String, ['a', 'b', 'c']);Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$v->type |
BuiltinType |
The OPC UA type |
$v->value |
mixed |
The actual value (scalar or array) |
$v->dimensions |
?int[] |
Multi-dimensional array dimensions, or null |
Methods:
| Method | Returns | Description |
|---|---|---|
isMultiDimensional() |
bool |
True if dimensions has more than one entry |
DataValue
A value with metadata. The inner Variant is private -- use getValue() to unwrap it.
use PhpOpcua\Client\Types\DataValue;
$dv = new DataValue(
value: new Variant(BuiltinType::Int32, 42),
statusCode: 0,
sourceTimestamp: new DateTimeImmutable(),
serverTimestamp: new DateTimeImmutable(),
);Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$dv->statusCode |
int |
OPC UA status code |
$dv->sourceTimestamp |
?DateTimeImmutable |
When the source produced the value |
$dv->serverTimestamp |
?DateTimeImmutable |
When the server received it |
Methods:
| Method | Returns | Description |
|---|---|---|
getValue() |
mixed |
Unwrapped value from the inner Variant |
getVariant() |
?Variant |
The full Variant object (when you need type info) |
getEncodingMask() |
int |
Bitmask for binary encoding |
Tip:
getValue()returns the raw scalar or array directly. If you need to know the OPC UA type, callgetVariant()instead and check->type.
Factory methods:
DataValue provides static factory methods for creating instances with common types. Each returns a DataValue with status Good, no timestamps, and the appropriate Variant inside.
use PhpOpcua\Client\Types\DataValue;
use PhpOpcua\Client\Types\BuiltinType;
use PhpOpcua\Client\Types\StatusCode;
// Typed factories
DataValue::ofInt32(42);
DataValue::ofDouble(3.14);
DataValue::ofString('Hello');
DataValue::ofBoolean(true);
DataValue::ofFloat(1.5);
DataValue::ofUInt32(100);
DataValue::ofInt16(7);
DataValue::ofUInt16(8);
DataValue::ofInt64(123456789);
DataValue::ofUInt64(987654321);
DataValue::ofDateTime(new DateTimeImmutable());
// Generic factory — any BuiltinType
DataValue::of(42, BuiltinType::Int32);
// Bad status (no value)
DataValue::bad(StatusCode::BadNodeIdUnknown);| Factory Method | Type | Description |
|---|---|---|
ofInt32(int $v) |
BuiltinType::Int32 |
Signed 32-bit integer |
ofDouble(float $v) |
BuiltinType::Double |
64-bit float |
ofString(string $v) |
BuiltinType::String |
UTF-8 string |
ofBoolean(bool $v) |
BuiltinType::Boolean |
Boolean |
ofFloat(float $v) |
BuiltinType::Float |
32-bit float |
ofUInt32(int $v) |
BuiltinType::UInt32 |
Unsigned 32-bit integer |
ofInt16(int $v) |
BuiltinType::Int16 |
Signed 16-bit integer |
ofUInt16(int $v) |
BuiltinType::UInt16 |
Unsigned 16-bit integer |
ofInt64(int $v) |
BuiltinType::Int64 |
Signed 64-bit integer |
ofUInt64(int $v) |
BuiltinType::UInt64 |
Unsigned 64-bit integer |
ofDateTime(DateTimeImmutable $v) |
BuiltinType::DateTime |
Date/time |
of(mixed $v, BuiltinType $type) |
any | Generic factory for any built-in type |
bad(int $statusCode) |
N/A | DataValue with no value and a bad status code |
BuiltinType (Enum)
All 25 OPC UA built-in data types:
use PhpOpcua\Client\Types\BuiltinType;| Case | Value | Case | Value | |
|---|---|---|---|---|
Boolean |
1 | DateTime |
13 | |
SByte |
2 | Guid |
14 | |
Byte |
3 | ByteString |
15 | |
Int16 |
4 | XmlElement |
16 | |
UInt16 |
5 | NodeId |
17 | |
Int32 |
6 | ExpandedNodeId |
18 | |
UInt32 |
7 | StatusCode |
19 | |
Int64 |
8 | QualifiedName |
20 | |
UInt64 |
9 | LocalizedText |
21 | |
Float |
10 | ExtensionObject |
22 | |
Double |
11 | DataValue |
23 | |
String |
12 | Variant / DiagnosticInfo |
24 / 25 |
Value Types
QualifiedName
A name qualified by a namespace index.
use PhpOpcua\Client\Types\QualifiedName;
$qn = new QualifiedName(0, 'ServerStatus');Properties (public readonly):
| Property | Type |
|---|---|
$qn->namespaceIndex |
int |
$qn->name |
string |
__toString() returns 'ServerStatus' for ns=0, or '2:Temperature' for ns=2.
LocalizedText
A string with an optional locale.
use PhpOpcua\Client\Types\LocalizedText;
$lt = new LocalizedText('en', 'Server Status');Properties (public readonly):
| Property | Type |
|---|---|
$lt->locale |
string |
$lt->text |
string |
__toString() returns the text.
StatusCode
Utility class for OPC UA status codes. All methods are static.
use PhpOpcua\Client\Types\StatusCode;
StatusCode::isGood(0x00000000); // true
StatusCode::isBad(0x80340000); // true
StatusCode::isUncertain(0x408F0000); // true
StatusCode::getName(0x80340000); // 'BadNodeIdUnknown'Static methods:
| Method | Returns | Description |
|---|---|---|
isGood(int $code) |
bool |
Top 2 bits are 00 |
isBad(int $code) |
bool |
Top 2 bits are 10 |
isUncertain(int $code) |
bool |
Top 2 bits are 01 |
getName(int $code) |
string |
Human-readable name, or hex fallback |
Constants:
| Constant | Value |
|---|---|
StatusCode::Good |
0x00000000 |
StatusCode::BadUnexpectedError |
0x80010000 |
StatusCode::BadInternalError |
0x80020000 |
StatusCode::BadOutOfMemory |
0x80030000 |
StatusCode::BadCommunicationError |
0x80050000 |
StatusCode::BadTimeout |
0x800A0000 |
StatusCode::BadServiceUnsupported |
0x800B0000 |
StatusCode::BadNothingToDo |
0x800F0000 |
StatusCode::BadTooManyOperations |
0x80100000 |
StatusCode::BadUserAccessDenied |
0x801F0000 |
StatusCode::BadSecureChannelIdInvalid |
0x80220000 |
StatusCode::BadSessionIdInvalid |
0x80250000 |
StatusCode::BadNodeIdUnknown |
0x80340000 |
StatusCode::BadAttributeIdInvalid |
0x80350000 |
StatusCode::BadIndexRangeInvalid |
0x80360000 |
StatusCode::BadNotWritable |
0x803B0000 |
StatusCode::BadNotReadable |
0x803E0000 |
StatusCode::BadTypeMismatch |
0x80740000 |
StatusCode::BadMethodInvalid |
0x80750000 |
StatusCode::BadArgumentsMissing |
0x80760000 |
StatusCode::BadInvalidArgument |
0x80AB0000 |
StatusCode::BadNoData |
0x80B10000 |
StatusCode::UncertainNoCommunicationLastUsableValue |
0x408F0000 |
Browse Types
ReferenceDescription
A reference between nodes, returned by browse().
Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$ref->referenceTypeId |
NodeId |
Type of reference |
$ref->isForward |
bool |
Direction of the reference |
$ref->nodeId |
NodeId |
Target node |
$ref->browseName |
QualifiedName |
Browse name of the target |
$ref->displayName |
LocalizedText |
Display name of the target |
$ref->nodeClass |
NodeClass |
Node class of the target |
$ref->typeDefinition |
?NodeId |
Type definition, if available |
BrowseNode
Tree node from browseRecursive(). Wraps a ReferenceDescription with children.
Properties (public readonly):
| Property | Type |
|---|---|
$node->reference |
ReferenceDescription |
Access the underlying reference data through $node->reference->nodeId, $node->reference->displayName, etc.
Methods:
| Method | Returns | Description |
|---|---|---|
getChildren() |
BrowseNode[] |
Child nodes |
hasChildren() |
bool |
True if this node has children |
addChild(BrowseNode $child) |
void |
Add a child node |
See Browsing for tree traversal examples.
BrowseDirection (Enum)
use PhpOpcua\Client\Types\BrowseDirection;| Case | Value | Description |
|---|---|---|
Forward |
0 |
Browse children |
Inverse |
1 |
Browse parents |
Both |
2 |
Browse both directions |
NodeClass (Enum)
use PhpOpcua\Client\Types\NodeClass;| Case | Value |
|---|---|
Unspecified |
0 |
Object |
1 |
Variable |
2 |
Method |
4 |
ObjectType |
8 |
VariableType |
16 |
ReferenceType |
32 |
DataType |
64 |
View |
128 |
Server Types
EndpointDescription
Server endpoint info, returned by getEndpoints().
Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$ep->endpointUrl |
string |
Endpoint URL |
$ep->serverCertificate |
?string |
DER-encoded certificate |
$ep->securityMode |
int |
1 = None, 2 = Sign, 3 = SignAndEncrypt |
$ep->securityPolicyUri |
string |
Security policy URI |
$ep->userIdentityTokens |
UserTokenPolicy[] |
Supported auth methods |
$ep->transportProfileUri |
string |
Transport profile URI |
$ep->securityLevel |
int |
Relative security ranking |
UserTokenPolicy
Authentication method supported by an endpoint.
Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$policy->policyId |
?string |
Policy identifier |
$policy->tokenType |
int |
0 = Anonymous, 1 = Username, 2 = Certificate |
$policy->issuedTokenType |
?string |
Issued token type URI |
$policy->issuerEndpointUrl |
?string |
Issuer endpoint URL |
$policy->securityPolicyUri |
?string |
Security policy for this token |
ConnectionState (Enum)
use PhpOpcua\Client\Types\ConnectionState;| Case | Description |
|---|---|
Disconnected |
Never connected, or cleanly disconnected |
Connected |
Active connection |
Broken |
Connection was lost |
Used by $client->getConnectionState() and $client->isConnected(). See Connection & Configuration.
AttributeId
Constants for OPC UA node attributes.
use PhpOpcua\Client\Types\AttributeId;| Constant | Value | Constant | Value | |
|---|---|---|---|---|
NodeId |
1 | EventNotifier |
12 | |
NodeClass |
2 | Value |
13 | |
BrowseName |
3 | DataType |
14 | |
DisplayName |
4 | ValueRank |
15 | |
Description |
5 | ArrayDimensions |
16 | |
WriteMask |
6 | AccessLevel |
17 | |
UserWriteMask |
7 | UserAccessLevel |
18 | |
IsAbstract |
8 | MinimumSamplingInterval |
19 | |
Symmetric |
9 | Historizing |
20 | |
InverseName |
10 | Executable |
21 | |
ContainsNoLoops |
11 | UserExecutable |
22 |
Note:
AttributeId::Value(13) is the default forread()andwrite().
Result DTOs
All result DTOs use public readonly properties.
BrowseResultSet
Returned by browseWithContinuation() and browseNext().
| Property | Type | Description |
|---|---|---|
$result->references |
ReferenceDescription[] |
Browse results |
$result->continuationPoint |
?string |
null when there are no more results |
See Browsing.
BrowsePathResult
Returned by translateBrowsePaths(), one per path.
| Property | Type | Description |
|---|---|---|
$result->statusCode |
int |
Status of the path resolution |
$result->targets |
BrowsePathTarget[] |
Resolved targets |
BrowsePathTarget
A single target resolved from a browse path.
| Property | Type | Description |
|---|---|---|
$target->targetId |
NodeId |
The resolved NodeId |
$target->remainingPathIndex |
int |
0xFFFFFFFF if fully resolved |
CallResult
Returned by call(). See Method Calling.
| Property | Type | Description |
|---|---|---|
$result->statusCode |
int |
Method execution status |
$result->inputArgumentResults |
int[] |
Per-argument validation status codes |
$result->outputArguments |
Variant[] |
Output values |
SubscriptionResult
Returned by createSubscription(). See Subscriptions.
| Property | Type | Description |
|---|---|---|
$result->subscriptionId |
int |
Server-assigned subscription ID |
$result->revisedPublishingInterval |
float |
Actual interval in ms |
$result->revisedLifetimeCount |
int |
Actual lifetime count |
$result->revisedMaxKeepAliveCount |
int |
Actual keep-alive count |
MonitoredItemResult
Returned per item by createMonitoredItems() and createEventMonitoredItem(). See Subscriptions.
| Property | Type | Description |
|---|---|---|
$result->monitoredItemId |
int |
Server-assigned item ID |
$result->statusCode |
int |
Creation status |
$result->revisedSamplingInterval |
float |
Actual sampling interval in ms |
$result->revisedQueueSize |
int |
Actual queue size |
PublishResult
Returned by publish(). See Subscriptions.
| Property | Type | Description |
|---|---|---|
$result->subscriptionId |
int |
Which subscription this belongs to |
$result->sequenceNumber |
int |
Sequence number (for acknowledgment) |
$result->moreNotifications |
bool |
True if more notifications are waiting |
$result->notifications |
array |
Notification entries |
Each entry in notifications is an associative array. For data changes: type, clientHandle, dataValue. For events: type, clientHandle, eventFields.
TransferResult
Returned per subscription by transferSubscriptions(). See Subscriptions.
| Property | Type | Description |
|---|---|---|
$result->statusCode |
int |
Transfer status for this subscription |
$result->availableSequenceNumbers |
int[] |
Sequence numbers available for republishing |
Type Discovery
StructureField
Describes a single field within a structure definition. Returned as part of StructureDefinition.
use PhpOpcua\Client\Types\StructureField;Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$field->name |
string |
Field name |
$field->dataType |
NodeId |
OPC UA data type of the field |
$field->valueRank |
int |
-1 = scalar, 1 = array |
$field->builtinType |
BuiltinType |
Resolved built-in type for encoding |
$field->isOptional |
bool |
Whether the field is optional |
StructureDefinition
Describes the layout of a custom structure type. Used by discoverDataTypes() to build dynamic codecs.
use PhpOpcua\Client\Types\StructureDefinition;Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$def->defaultEncodingId |
NodeId |
Binary encoding NodeId |
$def->baseDataType |
NodeId |
Base data type NodeId |
$def->structureType |
int |
0 = Structure, 1 = StructureWithOptionalFields, 2 = Union |
$def->fields |
StructureField[] |
Ordered list of fields |
ExtensionObject
Represents an OPC UA ExtensionObject — a typed container for custom binary or XML structures.
use PhpOpcua\Client\Types\ExtensionObject;Properties (public readonly):
| Property | Type | Description |
|---|---|---|
$ext->typeId |
NodeId |
Encoding NodeId identifying the type |
$ext->encoding |
int |
0x01 = binary, 0x02 = XML, 0x00 = no body |
$ext->body |
?string |
Raw body bytes. Null when decoded via codec. |
$ext->value |
mixed |
Decoded value from codec. Null when raw. |
Methods:
| Method | Returns | Description |
|---|---|---|
isDecoded() |
bool |
True if decoded by a registered codec |
isRaw() |
bool |
True if no codec was available (raw body) |
Behavior with DataValue::getValue():
- With codec registered:
getValue()auto-extracts$ext->value— returns the decoded data directly (e.g.['x' => 1.0, 'y' => 2.0]) - Without codec:
getValue()returns theExtensionObjectDTO — access->typeId,->body, etc.
$value = $client->read($pointNodeId)->getValue();
if ($value instanceof ExtensionObject) {
echo $value->typeId; // raw, no codec
echo $value->body; // binary blob
} else {
echo $value['x']; // decoded via codec
}ExtensionObject Codecs
Register codecs to automatically decode ExtensionObjects. Full guide: ExtensionObject Codecs.
$repo = new ExtensionObjectRepository();
$repo->register(NodeId::numeric(2, 5001), MyPointCodec::class);
$client = ClientBuilder::create($repo)
->connect('opc.tcp://localhost:4840');
$result = $client->read($pointNodeId);
// $result->getValue() => ['x' => 1.0, 'y' => 2.0, 'z' => 3.0]Each Client has its own isolated repository. If you do not pass one, the builder creates an empty one internally.