PHP__toString

Resumo : neste tutorial, você aprenderá como usar o __toString()método PHP para retornar a representação em string de um objeto.

Introdução ao método PHP __toString()

Este __toString()é um dos métodos mágicos em PHP. O seguinte mostra a sintaxe do __toString()método:

public function __toString ( ) : stringLinguagem de código:  PHP  ( php )

O __toString()método não aceita nenhum parâmetro e retorna uma string.

Quando você usa um objeto como se fosse uma string, o PHP chamará automaticamente o __toString()método mágico. Se o método não existir, o PHP gera um erro.

O exemplo a seguir define a BankAccountclasse, cria uma nova instância de BankAccounte exibe-a:

<?php

class BankAccount
{
	private $accountNumber;

	private $balance;

	public function __construct(
		$accountNumber,
		$balance
	) {
		$this->accountNumber = $accountNumber;
		$this->balance = $balance;
	}
}

$account = new BankAccount('123456789', 100);
echo $account;Linguagem de código:  HTML, XML  ( xml )

PHP gera o seguinte erro:

PHP Fatal error:  Uncaught Error: Object of class BankAccount could not be converted to string...Linguagem de código:  texto simples  ( texto simples )

Para usar o $accountobjeto como uma string, você precisa implementar o __toString()método que retorna a representação em string do BankAccountobjeto. Por exemplo:

<?php

class BankAccount
{
	private $accountNumber;

	private $balance;

	public function __construct(
		$accountNumber,
		$balance
	) {
		$this->accountNumber = $accountNumber;
		$this->balance = $balance;
	}

	public function __toString()
	{
		return "Bank Account: $this->accountNumber. Balance: $$this->balance";
	}
}


$account = new BankAccount('123456789', 100);
echo $account;Linguagem de código:  HTML, XML  ( xml )

Neste exemplo, __toString()retorna uma string que contém o número da conta bancária e seu saldo atual. Aqui está a saída:

Bank Account: 123456789. Balance: $100Linguagem de código:  texto simples  ( texto simples )

Observe que você pode usar o BankAccountobjeto em qualquer lugar que aceite uma string. Por exemplo, você pode concatenar uma string com o BankAccountobjeto assim:

$account = new BankAccount('123456789', 100);

echo 'Bank information:' . $account;Linguagem de código:  PHP  ( php )

Saída:

Bank information:Bank Account: 123456789. Balance: $100Linguagem de código:  texto simples  ( texto simples )

Valor de retorno

No PHP 7.4, o __toString()método deve retornar uma string, caso contrário o PHP lançará um erro.

O exemplo a seguir define a Quarterclasse que representa o trimestre do ano. Ele implementa o __toString()método que retorna um número:

<?php

class Quarter
{
	private $number;

	public function __construct($number)
	{
		if ($number < 0 && $number > 4) {
			throw new InvalidArgumentException('Quarter must be between 1 and 4');
		}
		$this->number = $number;
	}

	public function __toString()
	{
		return $this->number;
	}
}

$quarter = new Quarter(1);
echo $quarter;
Linguagem de código:  HTML, XML  ( xml )

PHP gera o seguinte erro:

Fatal error: Uncaught Error: Method Quarter::__toString() must return a string valueLinguagem de código:  texto simples  ( texto simples )

O PHP não força o número a uma string neste caso.

No PHP 8, você receberá o mesmo erro. No entanto, se você desabilitar a digitação estrita, o PHP forçará o valor de retorno a um valor de string.

Para desabilitar o tipo estrito, você segue a seguinte instrução:

declare(strict_types=0);Linguagem de código:  PHP  ( php )

O exemplo a seguir funciona no PHP 8 com a digitação estrita desativada:

<?php

declare(strict_types=0);

class Quarter
{
	private $number;

	public function __construct($number)
	{
		if ($number < 0 && $number > 4) {
			throw new InvalidArgumentException('Quarter must be between 1 and 4');
		}
		$this->number = $number;
	}

	public function __toString()
	{
		return $this->number;
	}
}

$quarter = new Quarter(1);
echo $quarter;Linguagem de código:  HTML, XML  ( xml )

Resumo

  • Implemente o __toString()método mágico para criar a representação em string de um objeto.
  • O __toString()método deve retornar um valor de string ou o PHP gerará um erro.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *