sajad torkamani

Typehint parameter type

/**
* @param array{
*     authBearer: string,
*     relationship: string,
*     companyUser: string
* } $options
*/
private function createAdviser(array $options): void
{
    $authBearer = $options['authBearer'];
    $relationship = $options['relationship'];
    $companyUser = $options['companyUser'];

    $this->client->request('POST', '/v1/lead-advisers', [
        'auth_bearer' => $authBearer,
        'json'        => [
            'relationship' => $this->iriConverter->getIriFromResource($relationship),
            'companyUser'  => $this->iriConverter->getIriFromResource($companyUser),
        ],
    ]);
}

Typehint function return type

/**
 * @return array{
 *     totalItems: int,
 *     paginatedResults: User[],
 * }
 */
function searchByParams(Company $company): array
{
  // code here...
}

Typehint class property

class Example
{
    /**
     * @var array{
     *     id: int,
     *     name: string,
     *     tags: string[],
     *     metadata?: array<string, mixed>
     * }
     */
    private array $data;

    public function setData(array $data): void
    {
        $this->data = $data;
    }

    public function getData(): array
    {
        return $this->data;
    }
}