Zur Navigation

An Objekt aus einem Array kommen

1 Horst_Braun

Hallo,

ich arbeite mit der DHL API und erhalte folgendes Ergebnis bei einer print_r Ausgabe
print_r($shipments);
mit PHP:
array
(    [0] => Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment Object
        (
            [sequenceNumber:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private] => 0
            [shipmentNumber:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private] => 123
            [returnShipmentNumber:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private] => 
            [shipmentLabel:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private] => Testergebnis
            [returnLabel:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private] => 
            [exportLabel:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private] => 
            [codLabel:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private] => 
        )

)
Ich brauche das "Testergebnis". Aber ich finde den korrekten Syntax nicht.

Beide Versionen gehen nicht:
$ergebnis = $shipments[0]->{'shipmentLabel:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment'};

$ergebnis = $shipments[0]->shipmentLabel;

Kann mir bitte jemand helfen?

Vielen Dank.

MfG

31.01.2025 13:53 | geändert: 31.01.2025 14:02

2 Jörg Kruse

Das :private gehört wohl auch noch zum Property-Namen:

$ergebnis = $shipments[0]->{'shipmentLabel:Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment:private'};

31.01.2025 14:09

3 Horst_Braun

Vielen Dank.

Das hatte ich auch schon versucht. Leider bleibt $ergebnis leer.

MfG

31.01.2025 14:13

4 Horst_Braun

Ich habe es noch mit var_export ausgegeben:
var_export($shipments);

Das sieht dann so aus
array (
  0 => 
  Dhl\Sdk\Paket\Bcs\Service\ShipmentService\Shipment::__set_state(array(
     'sequenceNumber' => '0',
     'shipmentNumber' => '123',
     'returnShipmentNumber' => '',
     'shipmentLabel' => 'Testergebnis',
     'returnLabel' => '',
     'exportLabel' => '',
     'codLabel' => '',
  )),
)

31.01.2025 14:36 | geändert: 31.01.2025 14:37

5 Jörg Kruse

Wenn es sich wirklich um private Properties handelt, wie es das :private nahelegt, dann kann wohl nicht direkt darauf zugegriffen werden. Da bräuchte es z.B. eine entsprechende getter Methode, falls vorhanden.

Mit print_r() kann man diese Properties aber dennoch sehen.

Wie hast du dieses Array denn erhalten?

31.01.2025 14:49

6 Horst_Braun

Aus dem Git von DHL BCS API SDK.

Unter dem Punkt Create Shipment Order in der Readme gibt es:
$logger = new \Psr\Log\NullLogger();

$serviceFactory = new \Dhl\Sdk\Paket\Bcs\Service\ServiceFactory();
$service = $serviceFactory->createShipmentService($authStorage, $logger, $sandbox = true);

$orderConfiguration = new \Dhl\Sdk\Paket\Bcs\Service\ShipmentService\OrderConfiguration(
    $printOnlyIfCodable = true,
    $combinedPrinting = null,
    $docFormat = \Dhl\Sdk\Paket\Bcs\Api\Data\OrderConfigurationInterface::DOC_FORMAT_PDF,
    $printFormat = \Dhl\Sdk\Paket\Bcs\Api\Data\OrderConfigurationInterface::PRINT_FORMAT_A4
);

$requestBuilder = new \Dhl\Sdk\Paket\Bcs\RequestBuilder\ShipmentOrderRequestBuilder();
$requestBuilder->setShipperAccount($billingNumber = '22222222220101');
$requestBuilder->setShipperAddress(
    $company = 'DHL',
    $country = 'DE',
    $postalCode = '53113',
    $city = 'Bonn',
    $street = 'Charles-de-Gaulle-Straße',
    $streetNumber = '20'
);
$requestBuilder->setRecipientAddress(
    $recipientName = 'Jane Doe',
    $recipientCountry = 'DE',
    $recipientPostalCode = '53113',
    $recipientCity = 'Bonn',
    $recipientStreet = 'Sträßchensweg',
    $recipientStreetNumber = '2'
);
$requestBuilder->setShipmentDetails($productCode = 'V01PAK', $shipmentDate = new \DateTime());
$requestBuilder->setPackageDetails($weightInKg = 2.4);

$shipmentOrder = $requestBuilder->create();
$shipments = $service->createShipments([$shipmentOrder], $orderConfiguration);

MfG

31.01.2025 14:56

8 Horst_Braun

Oh!! Super. Das geht. Vielen Dank.

Mit getShipmentLabel() habe ich schon viel herumprobiert. Aber nicht genauso.

Danke.

MfG

31.01.2025 15:40

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]