SóProvas


ID
879862
Banca
IESES
Órgão
CRF-SC
Ano
2012
Provas
Disciplina
Programação
Assuntos

Um dos principais aperfeiçoamentos do modelo orientado a objeto do PHP na versão 5 é o tratamento de todos os objetos como referências ao invés de valores. Porém, como criar uma cópia de um objeto se todos os objetos são tratados como referências?

Identifique a alternativa que responde a pergunta acima:

Alternativas
Comentários
  • Segundo o manual do php 5*, a sintaxe ficaria assim:
    copy_of_object = clone $object;Logo a alternativa mais adequada seria a b).Para ilustrar abaixo há um exemplo de cópia por referência e depois clonagem**. class foo {    public $bar;}$foo = new foo();$foo->bar = 'baz';$foo2 = $foo;$foo2->bar = 'bat';echo $foo->bar;echo $foo2->bar;Agora o código abaixo com operação de clonagemclass foo {    public $bar;}$foo = new foo();$foo->bar = 'baz';$foo2 = clone $foo;$foo2->bar = 'bat';echo $foo->bar . "\n";echo $foo2->bar . "\n";


    Referência
    * Php Manual - Object Cloning, http://php.net/manual/en/language.oop5.cloning.php
    ** http://www.electrictoolbox.com/copy-object-php-clone/
  • Apenas colocando o codigo do amigo acima identado para quem quiser analisar:

    //sem clone, valores por referencia
    class foo {    
        public $bar;
    }
    $foo = new foo();
    $foo->bar = 'baz';
    $foo2 = $foo;
    $foo2->bar = 'bat';
    echo $foo->bar;
    echo $foo2->bar;
     
     
    //com clonagem
    class foo {    
        public $bar;
    }
    $foo = new foo();
    $foo->bar = 'baz';
    $foo2 = clone $foo;
    $foo2->bar = 'bat';
    echo $foo->bar;
    echo $foo2->bar;
  • Uma cópia de objeto é criada usando a palavra-chave clone (que, se possível, chama o método __clone() do objeto). O método __clone() de um objeto não pode ser chamado diretamente.

    $copia_do_objeto = clone $objeto;

    Ao se clonar um objeto, o PHP 5 fará uma cópia superficial de todas as propriedades do objeto. Qualquer propriedade que seja referência a outra variável, permanecerá como referência.

    void __clone ( void )

    Depois que a clonagem se completa, se um método __clone() estiver definido, o objeto recém criado terá seu método __clone() chamado, permitindo que qualquer propriedade seja alterada.