diff --git a/src/Client.php b/src/Client.php index d146c50..b4fa226 100644 --- a/src/Client.php +++ b/src/Client.php @@ -278,9 +278,13 @@ public function __call($name, $args) } // args, {Operation}Request request, array options - $request = isset($args[0]) ? $args[0] : []; - $options = count($args) > 1 ? $args[1] : []; + $request = $args[0] ?? []; + $options = $args[1] ?? []; + if (version_compare(PHP_VERSION, '8.0.0', '>=')) { + $request = $args['request'] ?? $request; + $options = $args['args'] ?? $options; + } if (!($request instanceof Types\RequestModel)) { throw new \InvalidArgumentException('args[0] is not subclass of RequestModel, got ' . \gettype($request)); } diff --git a/tests/IntegrationTests/ClientCallArgsTest.php b/tests/IntegrationTests/ClientCallArgsTest.php new file mode 100644 index 0000000..e95b8ea --- /dev/null +++ b/tests/IntegrationTests/ClientCallArgsTest.php @@ -0,0 +1,51 @@ +getDefaultClient(); + $bucketName = self::$bucketName; + $key = self::randomObjectName(); + + // case 1: + $request = new \AlibabaCloud\Oss\V2\Models\PutObjectRequest($bucketName, $key); + $request->body = \AlibabaCloud\Oss\V2\Utils::streamFor('hi oss'); + $result = $client->putObject($request); + $this->assertEquals(200, $result->statusCode); + $this->assertEquals('OK', $result->status); + $this->assertEquals(True, count($result->headers) > 0); + $this->assertEquals(24, strlen($result->requestId)); + + // case 2: + $result = $client->putObject( + new \AlibabaCloud\Oss\V2\Models\PutObjectRequest( + bucket: $bucketName, + key: $key, + body: \AlibabaCloud\Oss\V2\Utils::streamFor('hi oss') + )); + $this->assertEquals(200, $result->statusCode); + $this->assertEquals('OK', $result->status); + $this->assertEquals(True, count($result->headers) > 0); + $this->assertEquals(24, strlen($result->requestId)); + + // case 3: + $result = $client->putObject( + request: new \AlibabaCloud\Oss\V2\Models\PutObjectRequest( + bucket: $bucketName, + key: $key, + body: \AlibabaCloud\Oss\V2\Utils::streamFor('hi oss') + )); + $this->assertEquals(200, $result->statusCode); + $this->assertEquals('OK', $result->status); + $this->assertEquals(True, count($result->headers) > 0); + $this->assertEquals(24, strlen($result->requestId)); + } +}