<?php

namespace Proxies\__CG__\App\Entity;

/**
 * DO NOT EDIT THIS FILE - IT WAS CREATED BY DOCTRINE'S PROXY GENERATOR
 */
class Trida extends \App\Entity\Trida implements \Doctrine\ORM\Proxy\Proxy
{
    /**
     * @var \Closure the callback responsible for loading properties in the proxy object. This callback is called with
     *      three parameters, being respectively the proxy object to be initialized, the method that triggered the
     *      initialization process and an array of ordered parameters that were passed to that method.
     *
     * @see \Doctrine\Common\Proxy\Proxy::__setInitializer
     */
    public $__initializer__;

    /**
     * @var \Closure the callback responsible of loading properties that need to be copied in the cloned object
     *
     * @see \Doctrine\Common\Proxy\Proxy::__setCloner
     */
    public $__cloner__;

    /**
     * @var boolean flag indicating if this object was already initialized
     *
     * @see \Doctrine\Common\Persistence\Proxy::__isInitialized
     */
    public $__isInitialized__ = false;

    /**
     * @var array<string, null> properties to be lazy loaded, indexed by property name
     */
    public static $lazyPropertiesNames = array (
);

    /**
     * @var array<string, mixed> default values of properties to be lazy loaded, with keys being the property names
     *
     * @see \Doctrine\Common\Proxy\Proxy::__getLazyProperties
     */
    public static $lazyPropertiesDefaults = array (
);



    public function __construct(?\Closure $initializer = null, ?\Closure $cloner = null)
    {

        $this->__initializer__ = $initializer;
        $this->__cloner__      = $cloner;
    }







    /**
     * 
     * @return array
     */
    public function __sleep()
    {
        if ($this->__isInitialized__) {
            return ['__isInitialized__', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'id', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'nazev', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'ucitel', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'zak', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'skola', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'cas', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'ucebna', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'vybranePredmety', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'historie', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'typ_tridy', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'TT', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'rocnik', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'obor', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'Jaz_O'];
        }

        return ['__isInitialized__', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'id', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'nazev', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'ucitel', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'zak', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'skola', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'cas', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'ucebna', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'vybranePredmety', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'historie', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'typ_tridy', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'TT', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'rocnik', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'obor', '' . "\0" . 'App\\Entity\\Trida' . "\0" . 'Jaz_O'];
    }

    /**
     * 
     */
    public function __wakeup()
    {
        if ( ! $this->__isInitialized__) {
            $this->__initializer__ = function (Trida $proxy) {
                $proxy->__setInitializer(null);
                $proxy->__setCloner(null);

                $existingProperties = get_object_vars($proxy);

                foreach ($proxy::$lazyPropertiesDefaults as $property => $defaultValue) {
                    if ( ! array_key_exists($property, $existingProperties)) {
                        $proxy->$property = $defaultValue;
                    }
                }
            };

        }
    }

    /**
     * 
     */
    public function __clone()
    {
        $this->__cloner__ && $this->__cloner__->__invoke($this, '__clone', []);
    }

    /**
     * Forces initialization of the proxy
     */
    public function __load()
    {
        $this->__initializer__ && $this->__initializer__->__invoke($this, '__load', []);
    }

    /**
     * {@inheritDoc}
     * @internal generated method: use only when explicitly handling proxy specific loading logic
     */
    public function __isInitialized()
    {
        return $this->__isInitialized__;
    }

    /**
     * {@inheritDoc}
     * @internal generated method: use only when explicitly handling proxy specific loading logic
     */
    public function __setInitialized($initialized)
    {
        $this->__isInitialized__ = $initialized;
    }

    /**
     * {@inheritDoc}
     * @internal generated method: use only when explicitly handling proxy specific loading logic
     */
    public function __setInitializer(\Closure $initializer = null)
    {
        $this->__initializer__ = $initializer;
    }

    /**
     * {@inheritDoc}
     * @internal generated method: use only when explicitly handling proxy specific loading logic
     */
    public function __getInitializer()
    {
        return $this->__initializer__;
    }

    /**
     * {@inheritDoc}
     * @internal generated method: use only when explicitly handling proxy specific loading logic
     */
    public function __setCloner(\Closure $cloner = null)
    {
        $this->__cloner__ = $cloner;
    }

    /**
     * {@inheritDoc}
     * @internal generated method: use only when explicitly handling proxy specific cloning logic
     */
    public function __getCloner()
    {
        return $this->__cloner__;
    }

    /**
     * {@inheritDoc}
     * @internal generated method: use only when explicitly handling proxy specific loading logic
     * @deprecated no longer in use - generated code now relies on internal components rather than generated public API
     * @static
     */
    public function __getLazyProperties()
    {
        return self::$lazyPropertiesDefaults;
    }

    
    /**
     * {@inheritDoc}
     */
    public function getId(): ?int
    {
        if ($this->__isInitialized__ === false) {
            return (int)  parent::getId();
        }


        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getId', []);

        return parent::getId();
    }

    /**
     * {@inheritDoc}
     */
    public function __toString()
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, '__toString', []);

        return parent::__toString();
    }

    /**
     * {@inheritDoc}
     */
    public function getNazev(): ?string
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getNazev', []);

        return parent::getNazev();
    }

    /**
     * {@inheritDoc}
     */
    public function setNazev(string $nazev): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setNazev', [$nazev]);

        return parent::setNazev($nazev);
    }

    /**
     * {@inheritDoc}
     */
    public function getUcitel(): ?\App\Entity\Ucitele
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getUcitel', []);

        return parent::getUcitel();
    }

    /**
     * {@inheritDoc}
     */
    public function addUcitel(\App\Entity\Ucitele $ucitel): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'addUcitel', [$ucitel]);

        return parent::addUcitel($ucitel);
    }

    /**
     * {@inheritDoc}
     */
    public function removeUcitel(\App\Entity\Ucitele $ucitel): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'removeUcitel', [$ucitel]);

        return parent::removeUcitel($ucitel);
    }

    /**
     * {@inheritDoc}
     */
    public function getZak(): \Doctrine\Common\Collections\Collection
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getZak', []);

        return parent::getZak();
    }

    /**
     * {@inheritDoc}
     */
    public function addZak(\App\Entity\Zak $zak): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'addZak', [$zak]);

        return parent::addZak($zak);
    }

    /**
     * {@inheritDoc}
     */
    public function removeZak(\App\Entity\Zak $zak): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'removeZak', [$zak]);

        return parent::removeZak($zak);
    }

    /**
     * {@inheritDoc}
     */
    public function getSkola(): ?\App\Entity\Skola
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getSkola', []);

        return parent::getSkola();
    }

    /**
     * {@inheritDoc}
     */
    public function setSkola(?\App\Entity\Skola $skola): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setSkola', [$skola]);

        return parent::setSkola($skola);
    }

    /**
     * {@inheritDoc}
     */
    public function getCas(): \Doctrine\Common\Collections\Collection
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getCas', []);

        return parent::getCas();
    }

    /**
     * {@inheritDoc}
     */
    public function addCa(\App\Entity\Cas $ca): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'addCa', [$ca]);

        return parent::addCa($ca);
    }

    /**
     * {@inheritDoc}
     */
    public function removeCa(\App\Entity\Cas $ca): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'removeCa', [$ca]);

        return parent::removeCa($ca);
    }

    /**
     * {@inheritDoc}
     */
    public function getUcebna(): ?\App\Entity\Ucebna
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getUcebna', []);

        return parent::getUcebna();
    }

    /**
     * {@inheritDoc}
     */
    public function setUcebna(?\App\Entity\Ucebna $ucebna): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setUcebna', [$ucebna]);

        return parent::setUcebna($ucebna);
    }

    /**
     * {@inheritDoc}
     */
    public function getVybranePredmety(): ?\App\Entity\VybranePredmety
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getVybranePredmety', []);

        return parent::getVybranePredmety();
    }

    /**
     * {@inheritDoc}
     */
    public function setVybranePredmety(?\App\Entity\VybranePredmety $vybranePredmety): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setVybranePredmety', [$vybranePredmety]);

        return parent::setVybranePredmety($vybranePredmety);
    }

    /**
     * {@inheritDoc}
     */
    public function getHistorie(): \Doctrine\Common\Collections\Collection
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getHistorie', []);

        return parent::getHistorie();
    }

    /**
     * {@inheritDoc}
     */
    public function addHistorie(\App\Entity\Historie $historie): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'addHistorie', [$historie]);

        return parent::addHistorie($historie);
    }

    /**
     * {@inheritDoc}
     */
    public function removeHistorie(\App\Entity\Historie $historie): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'removeHistorie', [$historie]);

        return parent::removeHistorie($historie);
    }

    /**
     * {@inheritDoc}
     */
    public function getTypTridy(): ?string
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getTypTridy', []);

        return parent::getTypTridy();
    }

    /**
     * {@inheritDoc}
     */
    public function setTypTridy(string $typ_tridy): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setTypTridy', [$typ_tridy]);

        return parent::setTypTridy($typ_tridy);
    }

    /**
     * {@inheritDoc}
     */
    public function getTT(): ?string
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getTT', []);

        return parent::getTT();
    }

    /**
     * {@inheritDoc}
     */
    public function setTT(?string $TT): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setTT', [$TT]);

        return parent::setTT($TT);
    }

    /**
     * {@inheritDoc}
     */
    public function getRocnik(): ?int
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getRocnik', []);

        return parent::getRocnik();
    }

    /**
     * {@inheritDoc}
     */
    public function setRocnik(int $rocnik): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setRocnik', [$rocnik]);

        return parent::setRocnik($rocnik);
    }

    /**
     * {@inheritDoc}
     */
    public function getObor(): ?string
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getObor', []);

        return parent::getObor();
    }

    /**
     * {@inheritDoc}
     */
    public function setObor(?string $obor): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setObor', [$obor]);

        return parent::setObor($obor);
    }

    /**
     * {@inheritDoc}
     */
    public function getJazO(): ?string
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'getJazO', []);

        return parent::getJazO();
    }

    /**
     * {@inheritDoc}
     */
    public function setJazO(string $Jaz_O): \App\Entity\Trida
    {

        $this->__initializer__ && $this->__initializer__->__invoke($this, 'setJazO', [$Jaz_O]);

        return parent::setJazO($Jaz_O);
    }

}
