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

From Woozle Writes Code
< Ferreteria‎ | v0.6‎ | clade‎ | Data‎ | Mem‎ | QVar
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); }

    // ++ 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();
            }
            if (CHECK_ASSERTS) $this->HardAssert(FALSE,"expected an object, found $sLine");
        }
        self::$nObjectLoop--;
        return $o;
    }

    // -- ACCESS -- //
}