Vinculação estática tardia do PHP

Resumo : neste tutorial, você aprenderá sobre o late static binding do PHP , que é um recurso interessante que foi adicionado ao PHP 5.3

Introdução à ligação estática tardia em PHP

Vamos começar com um exemplo simples.

<?php

class Model
{
	protected static $tableName = 'Model';

	public static function getTableName()
	{
		return self::$tableName;
	}
}

class User extends Model
{
	protected static $tableName = 'User';
}

echo User::getTableName(); // Model, not User
Linguagem de código:  HTML, XML  ( xml )

Como funciona.

  • Primeiro, crie uma Modelclasse que possua $tableNamepropriedade estática com o valor Model e um getTableName()método estático que retorne o valor do $tableName.
  • Segundo, crie outra classe chamada Userque estenda a Modelclasse. A Userclasse também possui $tableNameatributo estático.
  • Terceiro, chame o getTableName()método da Userclasse. No entanto, ele retorna Modelem vez de User. A razão é que selfé resolvido para a classe à qual o método pertence. Se você definir um método em uma classe pai e chamá-lo de uma subclasse, ele selfnão fará referência à subclasse como seria de esperar.

Para resolver esse problema, o PHP 5.3 introduziu um novo recurso chamado PHP static late binding.

Em vez de usar self, você usa a staticpalavra-chave que faz referência a uma classe exata que é chamada em tempo de execução.

Vamos modificar nosso exemplo acima:

<?php

class Model
{
	protected static $tableName = 'Model';

	public static function getTableName()
	{
		return static::$tableName;
	}
}

class User extends Model
{
	protected static $tableName = 'User';
}

echo User::getTableName(); // User
Linguagem de código:  HTML, XML  ( xml )

Agora você obtém o resultado esperado.

Deixe um comentário

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