Autor Zpráva
doominick
Profil *
Ahoj… mám jednoducho třídu, něco jako:
<?php

namespace Pokus;

class Trida
{
    public $neco = 0;
}

$a = new Trida();

print_r($a); //Pokus\Trida Object ( [neco] => 0 )

no a potřeboval bych změnit instanci objektu, tedy to Pokus\Trida na něco úplně jiného, třeba Neco\JinaTrida.

Už jsem se na to ptal jinde a řekli mi, že je to úplně jednoduché a že si mám přečíst http://php.net/manual/en/book.reflection.php nicméně stále nevím.

Může mi někdo prosím pomoct nějak lépe, než jen odkazem do dokumentace prosím?
Joker
Profil
doominick:
Co je cílem?

Jednoduše „přetypovat“ třídu na libovolnou jinou samozřejmě nelze a je to i nesmyslný požavatek.
Měl bych třeba třídu Uživatel s atributy Id, Jméno, Věk, Čas poslední aktivity, nějaké metody, třeba ZaznamenejAktivitu.
Měl bych třeba třídu Kruh s atributem Poloměr a metodami Obvod a Obsah.

Jakým způsobem bych obecně změnil Uživatele na Kruh?

Smysl to dává v případech, kdy:
A) Jedna třída je speciální případ druhé (třeba třídy Kruh a Geometrický tvar a potřebujete ty metody Obvod a Obsah). Pak poděďte první od druhé.
B) Obě třídy jsou speciální případy nějaké jedné (třeba Kruh a Čtverec, potřebujete metody Obvod a Obsah). Poděďte obě od stejné třídy a potřebné věci dejte na tu společnou.
C) Třídy spolu sice nesouvisejí, ale obě umějí dělat jednu nebo nějakou sadu analogických věcí, které potřebujete (například budu mít různé třídy, které všechny umějí zaznamenat aktivitu, ale jinak spolu nesouvisí). V tom případě vytvořte společné rozhraní a ty třídy ho budou implementovat.
doominick
Profil *
No cílem je dostat záznam z entity Doctrine 2 a uložit ho do jiné entity.

když si vezmu ukázku z dokumentace:

<?php
/** @Entity */
class Article
{
    /** @Id @Column(type="integer") @GeneratedValue */
    private $id;

    /** @Column(type="string") */
    private $headline;

    /** @ManyToOne(targetEntity="User") */
    private $author;

    /** @OneToMany(targetEntity="Comment", mappedBy="article") */
    private $comments;

    public function __construct {
        $this->comments = new ArrayCollection();
    }

    public function getAuthor() { return $this->author; }
    public function getComments() { return $this->comments; }
}

tak si načtu jeden záznam:
$article= $em->getRepository('MyProject\Domain\Article')->find('Article', 1);

a teď to potřebuju uložit jinou entitou

$em->getRepository('MyProject\Domain\Backup')->persist($article);
$em->getRepository('MyProject\Domain\Backup')->flush();

No a to právě nejde… protože jde o jinou instanci, i když struktura dat je úplně stejná. (Nějaké změny bych tam provedl, ale to zatím není aktuální, když neumím uložit ani nezměněná data). S Doctrine asi těch vymožeností jako je dědičnosti nevyužiji, tak teď vážně nevím, jak na to.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0