Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal
Galera tava pensando neste problema de forçar tipagem em php, por que a momentos que você precisa que uma array tenha uma coleção de dados de um tipo só. então fiz essas classes, para que de alguma forma forçe a tipagem, coisas que somente linguagens fortemente tipadas como java nos fornece.
Uma classe String, que guardará valores somente do tipo String:
class String {
private $value;
public function __construct( $value ) {
$this->set( $value );
}
public function set( $value ) {
$this->value = (string) $value; // converte para string
}
public function get() {
return $this->value;
}
// Compara se o valor do parâmetro é igual ao da instância da classe String
public function isEqual( String $string ) {
return $this->value === $string->get();
}
public function __toString() {
return $this->value;
}
}
Agora uma Classe arrayString que aceita valores somente do tipo string:
class ArrayString extends ArrayObject {
public function __construct($array){
foreach ($array as $v) {
if ( !$v instanceOf String )
throw new Exception("valor nao string dentro dessa array");
}
parent::__construct($array, ArrayObject::ARRAY_AS_PROPS);
}
public function offsetSet($index, $val) {
if ( !$val instanceOf String )
throw new Exception("Essa array so aceita valores do tipo string");
parent::offsetSet($index, $val);
}
}
Agora testando essas classes:
$String = new String('texto ');
$ArrayString = new ArrayString( array( $String, $String ) );
$ArrayString['valor'] = $String;
//$ArrayString['outroValor'] = new Int(8); // vai dá um erro
var_dump($ArrayString);
E ae pessoal, to viajando na maionese, ou fazendo isso pode resolver o problema de tipagem,
E outra coisa, já que para cada dado terá a sua classes especifica, isso poderá deixar o sistema mais lento ? pq terá varias instâncias de cada tipo de dado..
Opiniões, sugestões e correções serão muito bem vindos, desde já obrigado
Carregando comentários...