Ferreteria/v0.6/clade/Aux/StandardBase/Objectory: Difference between revisions

From Woozle Writes Code
Jump to navigation Jump to search
(Created page with "{{page/clade}} {| style="border: solid 1px black; float: right;" ! colspan=3 | Clade Family |- | align=right | {{l/ver/clade|Aux|StandardBase}} | → {{l/ver/clade|Aux\StandardBase|Objectorium}} | → {{l/ver/clade|Sys/Events|InputRq}} |}")
 
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{page/clade}}
{{page/clade/v2
{| style="border: solid 1px black; float: right;"
|fam=
! colspan=3 | Clade Family
{{!}} align=right {{!}} {{l/ver/clade|Aux|StandardBase}}
|-
{{!}} align=center {{!}} → {{l/ver/clade|Aux\StandardBase|Objectory}} →
| align=right | {{l/ver/clade|Aux|StandardBase}}
{{!}} align=left {{!}}
| → {{l/ver/clade|Aux\StandardBase|Objectorium}}
{{l/ver/clade|Sys\Events|InputRq}}<br>
| &rarr; {{l/ver/clade|Sys/Events|InputRq}}
{{l/ver/clade|Data\Base\Result|Player}}
|}
}}
==About==
'''Purpose''': a {{l/ver/topic|sys|Registry}} for global objects
 
At startup, objects of this class or its podlings can self-register with <code>{{l/ver/fx|SignThisUp}}()</code>. This creates an array-entry keyed to [<code>{{l/ver/fx|ClassSlug}}()</code>]+[<code>{{l/ver/fx|ObjectSlug}}()</code>], with the object (<code>$this</code>) as the array entry's value.
 
Code elsewhere can access registered objects via... {{hashtag|TODO}}
==Code==
''as of 2025-09-29''
{{fmt/php/block|1=
interface iObjectory extends BaseIface {
    // SETUP
    static function FromSlug(string $sSlug) : self; // create a new object with a name-slug
    // SETTING
    function ObjectSlug() : string;
}
class cObjectory extends BaseClass implements iObjectory {
 
    static protected function RegisterClass() : string { return RegClass::class; }
    #static protected function ManifestClass() : string { return MfsClass::class; }
 
    static protected function ClassSlug() : string { echo self::PromptForMethod('Must define ClassSlug() for this clade.').CRLF; die(); }
 
    // -- CONFIG -- //
    // ++ SETUP ++ //
 
    protected function __construct(){}
    static public function FromSlug(string $sSlug) : iObjectory { ($oThis = new static)->WithSlug($sSlug); return $oThis; }
 
    private $sSlug;
    public function ObjectSlug() : string { return $this->sSlug; }
 
    // ++ SETUP: dynamic ++ //
 
    // Remember the slug, and self-register with it.
    protected function WithSlug(string $sSlug) {
        $this->sSlug = $sSlug;
        $this->SignThisUp();
    }
 
    // -- SETUP -- //
    // ++ REGISTRY ++ //
 
    static private array $arObjRegs = [];
    static protected function Register() : RegIface { die('Use SignUpList()');
    static protected function Classifest() : ArrayIface { // clade-specific manifest (sub-array)
        $sCSlug = static::ClassSlug();
        if (array_key_exists($sCSlug,self::$arObjRegs)) {
            $oReg = self::$arObjRegs[$sCSlug];
        } else {
            $csReg = static::RegisterClass();
            $oReg = $csReg::AsNew();
            self::$arObjRegs[$sCSlug] = $oReg;
        }
        return $oReg;
    }
 
    protected function SelfRegister() { die('Use SignThisUp()'); }
    protected function SignThisUp() {
        $sSlug = $this->ObjectSlug();
        static::Classifest()->SetIt($sSlug,$this);
    }
 
    // -- REGISTRY -- //
}
}}

Latest revision as of 02:29, 16 October 2025

clade: Aux\StandardBase\Objectory
Clade Family
StandardBase Objectory

InputRq
Player

Clade Aliases
Alias Clade
Subpages

About

Purpose: a Registry for global objects

At startup, objects of this class or its podlings can self-register with SignThisUp(). This creates an array-entry keyed to [ClassSlug()]+[ObjectSlug()], with the object ($this) as the array entry's value.

Code elsewhere can access registered objects via... #TODO

Code

as of 2025-09-29

interface iObjectory extends BaseIface {
    // SETUP
    static function FromSlug(string $sSlug) : self; // create a new object with a name-slug
    // SETTING
    function ObjectSlug() : string;
}
class cObjectory extends BaseClass implements iObjectory {

    static protected function RegisterClass() : string { return RegClass::class; }
    #static protected function ManifestClass() : string { return MfsClass::class; }

    static protected function ClassSlug() : string { echo self::PromptForMethod('Must define ClassSlug() for this clade.').CRLF; die(); }

    // -- CONFIG -- //
    // ++ SETUP ++ //

    protected function __construct(){}
    static public function FromSlug(string $sSlug) : iObjectory { ($oThis = new static)->WithSlug($sSlug); return $oThis; }

    private $sSlug;
    public function ObjectSlug() : string { return $this->sSlug; }

    // ++ SETUP: dynamic ++ //

    // Remember the slug, and self-register with it.
    protected function WithSlug(string $sSlug) {
        $this->sSlug = $sSlug;
        $this->SignThisUp();
    }

    // -- SETUP -- //
    // ++ REGISTRY ++ //

    static private array $arObjRegs = [];
    static protected function Register() : RegIface { die('Use SignUpList()');
    static protected function Classifest() : ArrayIface { // clade-specific manifest (sub-array)
        $sCSlug = static::ClassSlug();
        if (array_key_exists($sCSlug,self::$arObjRegs)) {
            $oReg = self::$arObjRegs[$sCSlug];
        } else {
            $csReg = static::RegisterClass();
            $oReg = $csReg::AsNew();
            self::$arObjRegs[$sCSlug] = $oReg;
        }
        return $oReg;
    }

    protected function SelfRegister() { die('Use SignThisUp()'); }
    protected function SignThisUp() {
        $sSlug = $this->ObjectSlug();
        static::Classifest()->SetIt($sSlug,$this);
    }

    // -- REGISTRY -- //
}