Ferreteria/v0.6/clade/Data/Mem/QVar/Obj

From Woozle Writes Code
< Ferreteria‎ | v0.6‎ | clade‎ | Data‎ | Mem‎ | QVar
Revision as of 13:56, 17 October 2025 by Woozle (talk | contribs) (Created page with "{{page/clade/v2 |fam= {{!}} align=right {{!}} {{l/ver/clade|Data\Mem|QVar}} {{!}} align=center {{!}} → {{l/ver/clade|Data\Mem\QVar|Obj}} → {{!}} align=left {{!}} {{l/ver/clade|Data\Mem\QVar\Obj|Strict}} |alia= {{!}}- {{!}} '''Base'''* [ca,i] {{!!}} {{l/ver/clade/full|p=ferreteria|Data\Mem|QVar}} {{!}}- {{!}} '''TypesStatic''' [cs] {{!!}} {{l/ver/clade/full|p=ferreteria|Data\Mem\Val|Types}} }} ==Code== ''as of 2025-10-17'' {{fmt/php/block|1= interface iObj ex...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
clade: Data\Mem\QVar\Obj
Clade Family
QVar Obj Strict
Clade Aliases
Alias Clade
Base* [ca,i] Data\Mem\QVar
TypesStatic [cs] Data\Mem\Val\Types
Subpages

Code

as of 2025-10-17

interface iObj extends BaseIface {
    // SETUP
    static function FromObject(object $o) : self;
    static function FromObjNz(object &$o) : self;
    // VALUE ACCESS
    function SetIt(object $v);
    function SetItNz(?object $v);
    function GetIt()                         : object;
    function GetItNz(?object $vDefault=NULL) : ?object;
}

class cObj extends BaseClass implements iObj {

    // ++ SETUP ++ //

    static public function FromObject(object $o) : self {
        $oThis = new static;
        $oThis->SetIt($o);
        return $oThis;
    }
    static public function FromObjNz(object &$o) : self {
        $oThis = new static;
        $oThis->RefIt($o);
    }

    // -- SETUP -- //
    // ++ ACCESS ++ //

    public function HasIt() : bool                             { return $this->HasObj(); }
    public function SetIt(object $o)                           { $this->SetObj($o); }
    public function SetItNz(?object $o)                        { $this->SetObjNz($o); }
    public function GetIt() : object                           { return $this->GetObj(); }
    public function GetItNz(object $oDefault=NULL) : ?object   { return $this->GetObjNz($oDefault); }

    /* 2025-09-26 now implemented in parent
    public function HasIt() : bool                              { return is_object($this->v); }
    public function SetIt(object $v)                            { $this->v = $v; }
    public function SetItNz(?object $v)                         { if (is_object($v)) { $this->SetIt($v); } else { $this->ZapIt(); } }
    public function GetIt()                         : object    { return $this->Validated(); }
    public function GetItNz(?object $oDefault=NULL) : ?object   { return $this->HasIt() ? $this->Validated() : $oDefault; }
    */

    // ++ ACCESS: internal ++ //

    protected function TypeOk(mixed $v) : bool { return is_object($v); }

    static private $nObjectLoop = 0;
    protected function Validated() : object {
        $nLoop = self::$nObjectLoop;
        self::$nObjectLoop++;
        $o = $this->v;
        if (DEBUG_CHECK_TYPES && !is_object($o)) {
            if ($nLoop < MAX_INTERNAL_RECURSION) {
                $sLine = TypesStatic::DumpLine($o);
            } else {
                echo "DEBUG RECURSION (N=$nLoop); skipping DumpLine() and quitting.<br>";
                die();
            }
            #echo 'GOT TO '.__FILE__.' line '.__LINE__.' NEXT<br>';
            if (CHECK_ASSERTS) $this->HardAssert(FALSE,"expected an object, found $sLine");
        }
        self::$nObjectLoop--;
        return $o;
    }

    // -- ACCESS -- //
}