Gibt es einen Bezeichnung für Art von Klasse? – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Gibt es einen Bezeichnung für Art von Klasse? Thu, 13 Feb 20 22:06:43 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765123#m1765123 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765123#m1765123 <p>moin,</p> <p>Gibt es einen bestimmte Bezeichnung für Klassen, wobei die Logik in den Klassen bleibt und sie nur einen Eingangspunkt besizten?</p> <p>so…</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">ThingInstance</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span> <span class="token punctuation">(</span> <span class="token operator">?</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token function">doSomeThing</span> <span class="token punctuation">(</span> <span class="token operator">?</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token function">doOtherThing</span> <span class="token punctuation">(</span> <span class="token operator">?</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function-definition function">doSomeThing</span> <span class="token punctuation">(</span> <span class="token operator">?</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token operator">?</span> <span class="token punctuation">{</span> <span class="token comment">// Logik Teil</span> <span class="token punctuation">}</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function-definition function">doOtherThing</span> <span class="token punctuation">(</span> <span class="token operator">?</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token operator">?</span> <span class="token punctuation">{</span> <span class="token comment">// Logik Teil</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>…order so…</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">ThingInstance</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span> <span class="token punctuation">(</span> <span class="token operator">?</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Logik Gesamt</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>es käme bei beiden Beispielen, von außen betrachtet, die gleiche funktionalität hereaus. Ob es sich um Instanzen oder Klassen funktionalität handelt, ist in meine Frage unerheblich.</p> <p>lgmb</p> <p><em>P.S.:Ich hoffe man versteh mich, wenn nicht, ist es nicht tragisch </em></p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 06:46:48 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765126#m1765126 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765126#m1765126 <p>Moin,</p> <p>der Konstruktor ist eine Klassenmethode. In PHP werden Klassenmethoden auch als statische Methoden bezeichnet.</p> <p>MFG</p> <p>PS: Man kann die Klasse jedoch nicht als statische Klasse bezeichnen weil sie instanziiert werden kann.</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 06:53:35 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765127#m1765127 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765127#m1765127 <p>Tach!</p> <blockquote> <p>Gibt es einen bestimmte Bezeichnung für Klassen, wobei die Logik in den Klassen bleibt und sie nur einen Eingangspunkt besizten?</p> </blockquote> <p>Hmm, vielleicht "schlechter Stil". Das was in deinem Beispiel zu sehen ist, ist eine Klasse, die alles in ihrem Konstruktor macht. Man kann eine Instanz erstellen, aber man kann mit ihr nichts anfangen. Sie hat nur die Nebenwirkungen im Konstruktor. Ob das auf interne Methoden verteilt ist oder nicht, spielt dabei keine weitere Rolle. Wozu soll man also Instanzen erstellen können? In dem Fall sollte der Konstruktor private und die Funktionalität über eine public static Funktion erreichbar sein.</p> <p>Wenn die Funktionalität nicht auf interne Methoden aufgeteilt werden soll, kann man auch ganz auf die Klase verzichten und eine einfache Funktion erstellen.</p> <p>Falls dein Beispiel jedoch zu sehr gekürzt war, und die Realität konmplexer aussieht, kann man durchaus auch andere Argumente anführen.</p> <p>dedlfix.</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 15:52:40 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765199#m1765199 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765199#m1765199 <p>Ähmm,</p> <p>wie rufst Du die Klasse auf und was machst Du mit der Instanz?</p> <blockquote> <p>nur einen Eingangspunkt</p> </blockquote> <p>Was meinst Du damit? Eingangspunkt für was?</p> <p>MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 07:04:56 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765129#m1765129 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765129#m1765129 <p>Tach!</p> <blockquote> <p>der Konstruktor ist eine Klassenmethode. In PHP werden Klassenmethoden auch als statische Methoden bezeichnet.</p> </blockquote> <p>Nein. Die Konstruktormethode wird aufgerufen, wenn eine Instanz erstellt wird. Und es gibt keine statischen Konstruktoren in PHP.</p> <blockquote> <p>PS: Man kann die Klasse jedoch nicht als statische Klasse bezeichnen weil sie instanziiert werden kann.</p> </blockquote> <p>Wenn eine Klasse nicht instantiiert werden soll, gibt man ihr eine private Konstruktormethode. Damit ist sie de facto statisch, weil der Versuch, Instanzen zu erstellen, zu einem fatalen Fehler führt.</p> <p>Andererseits kann man einer solchen Klasse eine static Methode spendieren, in der Instanzen erstellt werden können, da sie als Mitglied der Klasse die private Konstruktormethode aufrufen darf.</p> <p>dedlfix.</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 07:49:29 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765131#m1765131 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765131#m1765131 <p>PS: Klassenmethoden verhalten sich statisch, egal ob man <code>static</code> davorschreibt oder nicht. Eine Klasse die nur statische Methoden hat und nicht instanziiert werden kann, ist eine statische Klasse.</p> <p>MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:16:03 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765133#m1765133 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765133#m1765133 <p>moin,</p> <p>Ok, ich habe da wohl meine Eingangsfrage nicht richtig gestellt. Sry dafür @pl.</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:46:06 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765146#m1765146 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765146#m1765146 <p>Moin,</p> <blockquote> <p>der Konstruktor ist eine Klassenmethode.</p> </blockquote> <p>Um das mal zu zeigen:</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span><span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$f</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Foo</span><span class="token punctuation">;</span> </code></pre> <p>Das wirft eine Fehlermeldung wie folgt:</p> <pre><code class="block">PHP Fatal error: Call to private Foo::__construct() from invalid context </code></pre> <p>Genso so ruft man Klassenmethoden auf, mit dem <code>T_PAAMAYIM_NEKUDOTAYIM</code>, also dem doppelten Doppelpunkt. PHP verrät infolge dieser Fehlermeldung daß der Konstruktor eine Klassenmethode ist und <code>new</code> nur ein Wrapper (Fascade).</p> <p>MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:25:33 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765136#m1765136 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765136#m1765136 <p>Hallo dedlfix,</p> <blockquote> <p>Wenn die Funktionalität nicht auf interne Methoden aufgeteilt werden soll, kann man auch ganz auf die Klase verzichten und eine einfache Funktion erstellen.</p> </blockquote> <p>Das lag mir auch auf der Zunge: So eine Klasse nennt man <em>Funktion</em> </p> <p>Aber der Nutzen liegt genau in dem, was Du nennst: interne Methoden. Da PHP keine lokalen Funktionen kennt (es sei denn man nutzt anonyme Funktionen), ist eine solche Klasse ein mögliches Mittel, um eine Aufgabe in überschaubare Teilfunktionen zu gliedern und so die Übersicht zu behalten.</p> <p>Das kann man auch mit einer statischen Klasse machen, ja. Eine statische Klasse hat den Nachteil, dass die internen Methoden alle Daten über Parameter erhalten müssen. Das passt zum funktionalen Paradigma, aber ist PHP für funktionale Programmierung optimiert? Wenn man ein Objekt erzeugt, hat man einen Container für Variablen, die von Konstruktor und Helper-Methoden geteilt werden können.</p> <p>Ob es sinnvoll ist, die Arbeit im Konstruktor zu erledigen, ist eine andere Frage. Es hängt davon ab, was das Ergebnis der Konstruktoraktivitäten ist. Entsteht nur ein einziger Wert oder eine größere Datenstruktur? Werden Werte aus einer externen Quelle eingelesen? Ist das Objekt bei einem Fehler im Konstruktor lebensfähig? Gerade die letzte Frage ist entscheidend. Ein Konstruktor soll eigentlich nur das Objekt initialisieren. Die Arbeit machen die Methoden. Wenn im Konstruktor etwas schiefgeht, kannst Du keinen Fehlercode zurückgeben. Du kannst nur eine Exception werfen, oder Du musst eine $success-Eigenschaft vorsehen. Code wie diesen finde ich aber nicht so schön:</p> <pre><code class="block language-php"><span class="token variable">$foo</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FooTool</span><span class="token punctuation">(</span><span class="token variable">$data1</span><span class="token punctuation">,</span> <span class="token variable">$data2</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">,</span> <span class="token variable">$dependency1</span><span class="token punctuation">,</span> <span class="token variable">$dependency2</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$foo</span><span class="token operator">-></span><span class="token property">success</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$foo</span><span class="token operator">-></span><span class="token property">data</span><span class="token punctuation">;</span> <span class="token comment">// etc</span> <span class="token punctuation">}</span> </code></pre> <p>Vor allem die Vermischung von Arbeitsdaten und Dependencies in den Parametern gefällt mir nicht. Ich würde dem Worker-Schema folgen und der Methode, die die Arbeit macht, einen Namen geben, der auf die Art der verrichteten Arbeit klar hinweist. Gute Namen ersparen 90% der Kommentare. FooWorker und CreateBarData sind natürlich wenig sprechend </p> <pre><code class="block language-php"><span class="token variable">$worker</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FooWorker</span><span class="token punctuation">(</span><span class="token variable">$dependency1</span><span class="token punctuation">,</span> <span class="token variable">$dependency2</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$success</span> <span class="token operator">=</span> <span class="token variable">$worker</span><span class="token operator">-></span><span class="token function">CreateBarData</span><span class="token punctuation">(</span><span class="token variable">$data1</span><span class="token punctuation">,</span> <span class="token variable">$data2</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$success</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$worker</span><span class="token operator">-></span><span class="token property">data</span><span class="token punctuation">;</span> <span class="token comment">// etc</span> <span class="token punctuation">}</span> </code></pre> <p>Dependencies gehen in den Konstruktor, das sind Referenzen auf andere Dienste im Programm. Arbeitsdaten gehen als Parameter an die Run-Methode.</p> <p>Wenn sich für die Run-Methode kein sinnvollerer Name als "Run" findet, ist das Objekt vielleicht besser ein Funktor:</p> <pre><code class="block language-php"><span class="token variable">$foo</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">BarWorker</span><span class="token punctuation">(</span><span class="token variable">$dep1</span><span class="token punctuation">,</span> <span class="token variable">$dep2</span><span class="token punctuation">,</span> <span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$foo</span><span class="token punctuation">(</span><span class="token variable">$data1</span><span class="token punctuation">,</span> data2<span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Dein "Häää? Wie geht denn das?" beantwortet sich <a href="https://www.php.net/manual/de/language.oop5.magic.php#object.invoke" rel="nofollow noopener noreferrer">hier</a> (Magic method <code>__invoke</code>).</p> <p>Das Ergebnis kann man über Eigenschaften bereitstellen. Man kann hier aber auch PHP-Interfaces wie <a href="https://www.php.net/manual/de/class.iterator" rel="nofollow noopener noreferrer">Iterator</a> oder <a href="https://www.php.net/manual/de/class.arrayaccess.php" rel="nofollow noopener noreferrer">ArrayAccess</a> einsetzen, um einen "natürlicheren" Zugang zu den Daten zu erhalten.</p> <pre><code class="block language-php"><span class="token variable">$worker</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FooWorker</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$worker</span><span class="token operator">-></span><span class="token function">GetPersons</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Müller"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$worker</span> <span class="token keyword">as</span> <span class="token variable">$person</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Nutzt das Iterable-Interface</span> <span class="token punctuation">}</span> <span class="token comment">// oder</span> <span class="token variable">$person</span> <span class="token operator">=</span> <span class="token variable">$worker</span><span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// Nutzt das ArrayAccess-Interface</span> <span class="token punctuation">}</span> </code></pre> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:26:56 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765137#m1765137 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765137#m1765137 <p>moin,</p> <blockquote> <p>Hmm, vielleicht "schlechter Stil".</p> </blockquote> <p>Sehe ich ähnlich.</p> <blockquote> <p>Das was in deinem Beispiel zu sehen ist, ist eine Klasse, die alles in ihrem Konstruktor macht. Man kann eine Instanz erstellen, aber man kann mit ihr nichts anfangen. Sie hat nur die Nebenwirkungen im Konstruktor. Ob das auf interne Methoden verteilt ist oder nicht, spielt dabei keine weitere Rolle.</p> </blockquote> <p>Vielen Danke. Du nimmst mir die Worte - die nicht vorhanden sind - aus meinem Mund .</p> <blockquote> <p>Wozu soll man also Instanzen erstellen können?</p> </blockquote> <p>Fals der Fall Auftritt und ich OOP entwickle <em>(z.B. Java 8)</em>.</p> <blockquote> <p>In dem Fall sollte der Konstruktor private und die Funktionalität über eine public static Funktion erreichbar sein.</p> </blockquote> <p>Du meinst <em>Sigelton</em>? Wozu?</p> <blockquote> <p>Wenn die Funktionalität nicht auf interne Methoden aufgeteilt werden soll, kann man auch ganz auf die Klase verzichten und eine einfache Funktion erstellen.</p> </blockquote> <p>siehe oben. Zitat: <em>"Fals der Fall Auftritt und ich OOP entwickle[…]"</em>.</p> <blockquote> <p>Falls dein Beispiel jedoch zu sehr gekürzt war, und die Realität konmplexer aussieht, kann man durchaus auch andere Argumente anführen.</p> </blockquote> <p>Wie sähen solche Argumente aus? Ich hab da an <em>FascadePattern</em> gedacht. Aber nur ins Blaue geschossen.</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:38:49 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765141#m1765141 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765141#m1765141 <p>Tach!</p> <blockquote> <p>PS: Klassenmethoden verhalten sich statisch, egal ob man <code>static</code> davorschreibt oder nicht.</p> </blockquote> <p>Die Methode __construct ist aber nicht statisch, weder mit noch ohne <code>static</code>. Sie wird im Instanz-Kontext aufgerufen, und man kann das auch händisch tun, wenn man mag.</p> <blockquote> <p>Eine Klasse die nur statische Methoden hat und nicht instanziiert werden kann, ist eine statische Klasse.</p> </blockquote> <p>Ja, gibt es nur nicht in PHP. Wie schon gesagt, mit privater Konstruktor-Methode kann sie zwar nicht von außen instantiiert werden, aber weiterhin von innen. Somit gibt es keine komplett statischen Klassen in PHP.</p> <p>dedlfix.</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:30:35 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765138#m1765138 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765138#m1765138 <p>moin,</p> <blockquote> <p>Ok, ich habe da wohl meine Eingangsfrage nicht richtig gestellt. Sry dafür @pl.</p> </blockquote> <p>Nun, eine Klasse bezeichnet man als <code>statische Klasse</code> wenn sie</p> <ol> <li>nicht instanziierbar ist,</li> <li>nur statische Methoden enthält.</li> </ol> <p>Überlege Dir, wie man (1) also die Instanziierung einer Klasse verhindern kann. Anders gesagt, verhindern kann, daß <code>new</code> aufgerufen wird. Wenn Du diese Bedingung erfüllen kannst, darfst Du Deine Klasse eine <code>statische Klasse</code> nennen.</p> <p>Ansonsten ist Deine Klasse eine ganz gewöhnliche Klasse. MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:38:37 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765140#m1765140 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765140#m1765140 <p>moin,</p> <blockquote> <p>lokalen Funktionen kennt (es sei denn man nutzt anonyme Funktionen), ist eine solche Klasse ein mögliches Mittel, um eine Aufgabe in überschaubare Teilfunktionen zu gliedern und so die Übersicht zu behalten.</p> </blockquote> <p>darauf wollte ich hinaus</p> <blockquote> <p>Ob es sinnvoll ist, die Arbeit im Konstruktor zu erledigen, ist eine andere Frage.</p> </blockquote> <p><a href="https://en.wikipedia.org/wiki/Decorator_pattern#PHP" rel="nofollow noopener noreferrer">interne Methode wrapComponent()</a> z.B. Ok das ist jetzt nicht das was ich an Code gepostet habe aber so in die richtung.</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:59:47 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765149#m1765149 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765149#m1765149 <p>Hallo MB,</p> <blockquote> <blockquote> <p>In dem Fall sollte der Konstruktor private und die Funktionalität über eine public static Funktion erreichbar sein.</p> </blockquote> </blockquote> <blockquote> <p>Du meinst Sigelton? Wozu?</p> </blockquote> <p>Du meinst <em>Singleton</em>? Nein, das nicht zwangsläufig das Gleiche.</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span> <span class="token punctuation">{</span> <span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">DoSomeWork</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span><span class="token punctuation">,</span> <span class="token variable">$c</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$foo</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$foo</span><span class="token operator">-></span><span class="token function">doThis</span><span class="token punctuation">(</span><span class="token variable">$c</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$foo</span><span class="token operator">-></span><span class="token function">doThat</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$foo</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">,</span> <span class="token variable">$b</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>Jeder Aufruf von DoSomeWork erzeugt eine neue Foo-Instanz und gibt sie zurück. Kein Singleton zu sehen.</p> <p>Im Übrigen möchte ich vor Übereifer im Software-Tango warnen: <a href="https://www.imdb.com/title/tt0053291/" rel="nofollow noopener noreferrer">Daphne, you're overengineering again!</a></p> <p>Code für die Zukunft zu bauen ist zumeist sinnlos. Bau das, was Du jetzt brauchst. Baue Unittests, um Fehler durch Codeänderungen automatisiert zu erkennen. Und wenn neue Anforderungen kommen, refaktoriere soweit wie nötig. Aber nicht mehr.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:41:18 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765142#m1765142 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765142#m1765142 <p>Tach!</p> <blockquote> <p>Nun, eine Klasse bezeichnet man als <code>statische Klasse</code> wenn sie</p> <ol> <li>nicht instanziierbar ist,</li> <li>nur statische Methoden enthält.</li> </ol> <p>Überlege Dir, wie man (1) also die Instanziierung einer Klasse verhindern kann.</p> </blockquote> <p>Gar nicht in PHP.</p> <blockquote> <p>Anders gesagt, verhindern kann, daß <code>new</code> aufgerufen wird. Wenn Du diese Bedingung erfüllen kannst, darfst Du Deine Klasse eine <code>statische Klasse</code> nennen.</p> </blockquote> <p>Ist nicht erfüllbar. Es sei denn, du kennst einen Weg, wie sowohl von außen als auch innerhalb der Klasse eine Instantiierung verhindert werden kann.</p> <p>dedlfix.</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:45:20 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765144#m1765144 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765144#m1765144 <p>moin,</p> <blockquote> <p>moin,</p> <blockquote> <p>Ok, ich habe da wohl meine Eingangsfrage nicht richtig gestellt. Sry dafür @pl.</p> </blockquote> <p>Nun, eine Klasse bezeichnet man als <code>statische Klasse</code> wenn sie […] Ansonsten ist Deine Klasse eine ganz gewöhnliche Klasse.</p> </blockquote> <p>Wie <a href="/users/27" class="mention registered-user" rel="noopener noreferrer">@dedlfix</a> schon erwähnt hat, mag das durch aus in anderen Sprachen gelten, aber nicht hier. Bitte vermische nicht Programmiersprachen. Das verwirrt Leser <em>(z.B. mich)</em>, ist extrem hinderlich und trägt zu lösung des Threads nichts bei.</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:45:22 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765145#m1765145 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765145#m1765145 <p>Hallo MB,</p> <p>was dieses wrapComponent tut, ist Aufgabe des Konstruktors. Das ist Initialisierung, nicht Arbeit.</p> <p>Die Echos und die Aufrufe von getValue und getData eher nicht. Das gehört in eine andere Methode - separation of concerns</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Alternative: Namespace Fri, 14 Feb 20 10:42:01 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765180#m1765180 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765180#m1765180 <p>moin,</p> <blockquote> <blockquote> <p>lokalen Funktionen kennt (es sei denn man nutzt anonyme Funktionen), ist eine solche Klasse ein mögliches Mittel, um eine Aufgabe in überschaubare Teilfunktionen zu gliedern und so die Übersicht zu behalten.</p> </blockquote> <p>darauf wollte ich hinaus</p> </blockquote> <p>Aha. Da sehe ich eine Alternative mit Namespace zu arbeiten.</p> <blockquote> <blockquote> <p>Ob es sinnvoll ist, die Arbeit im Konstruktor zu erledigen, ist eine andere Frage.</p> </blockquote> </blockquote> <p>Wenn Du nur statische Methoden hast sind Namespaces die Alternative zu statischen Klassen.</p> <p>Auf ein baldiges Wiedersehen hier, MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:48:54 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765147#m1765147 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765147#m1765147 <p>moin,</p> <blockquote> <blockquote> <p>moin,</p> <blockquote> <p>Ok, ich habe da wohl meine Eingangsfrage nicht richtig gestellt. Sry dafür @pl.</p> </blockquote> <p>Nun, eine Klasse bezeichnet man als <code>statische Klasse</code> wenn sie […] Ansonsten ist Deine Klasse eine ganz gewöhnliche Klasse.</p> </blockquote> <p>Wie <a href="/users/27" class="mention registered-user" rel="noopener noreferrer">@dedlfix</a> schon erwähnt hat, mag das durch aus in anderen Sprachen gelten, aber nicht hier.</p> </blockquote> <p>Selbstverständlich gilt der Begriff <code>statische Klasse</code> für alle Programmiersprachen.</p> <p>MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 10:49:10 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765182#m1765182 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765182#m1765182 <p>moin,</p> <blockquote> <p>was dieses wrapComponent tut, ist Aufgabe des Konstruktors. Das ist Initialisierung, nicht Arbeit.</p> </blockquote> <p>exakt!</p> <blockquote> <p>Die Echos und die Aufrufe von getValue und getData eher nicht. Das gehört in eine andere Methode - separation of concerns</p> </blockquote> <p>Sry, das wollte ich noch erwähnen das diese Echos nicht in euren Fokus geraten. Sry dafür .</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 08:59:27 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765148#m1765148 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765148#m1765148 <p>Tach!</p> <blockquote> <blockquote> <p>der Konstruktor ist eine Klassenmethode.</p> </blockquote> <p>Um das mal zu zeigen:</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span><span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$f</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Foo</span><span class="token punctuation">;</span> </code></pre> <p>Das wirft eine Fehlermeldung wie folgt:</p> <pre><code class="block">PHP Fatal error: Call to private Foo::__construct() from invalid context </code></pre> <p>Genso so ruft man Klassenmethoden auf, mit dem <code>T_PAAMAYIM_NEKUDOTAYIM</code>, also dem doppelten Doppelpunkt. PHP verrät infolge dieser Fehlermeldung daß der Konstruktor eine Klassenmethode ist und <code>new</code> nur ein Wrapper (Fascade).</p> </blockquote> <p>Das ist eine falsche Schlussfolgerung. Die Schreibweise Foo::Bar wird dazu verwendet, um zu kennzeichnen, dass Bar ein Mitglied der Klasse Foo ist - oder auch nicht. Mit statisch hat das nichts zu tun. Es ist nur dieselbe Schreibweise wie bei statischen Aufrufen.</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span> <span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token variable">$f</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$f</span><span class="token operator">-></span><span class="token property">qux</span><span class="token punctuation">;</span> <span class="token comment">// Notice: Undefined property: Foo::$qux</span> <span class="token variable">$f</span><span class="token operator">-></span><span class="token function">qux</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Fatal error: Uncaught Error: </span> <span class="token comment">// Call to undefined method Foo::qux()</span> </code></pre> <p>dedlfix.</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 12:22:43 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765187#m1765187 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765187#m1765187 <p>moin,</p> <blockquote> <p>Genso so ruft man Klassenmethoden auf, mit dem <code>T_PAAMAYIM_NEKUDOTAYIM</code>, also dem doppelten Doppelpunkt. PHP verrät infolge dieser Fehlermeldung daß der Konstruktor eine Klassenmethode ist und <code>new</code> nur ein Wrapper (Fascade).</p> </blockquote> <p>Sry, nur zum mitschreiben: durch dieses <code>T_PAAMAYIM_NEKUDOTAYIM</code> Indiz leitest du ab, das <code class="language-php"><span class="token function">__construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code> eine Klassenmethode sei, wo du - ich betone - augenscheinlich <em>KEIN</em> PHP Profi bist? Und du willst mit deiner - für mich - wagen Annahme, was du <em>"anscheinend"</em> für einen unmstößlicher Beweis hälst, den PHP Profies im Forum - als Laie - <em>"öffentlich"</em> weis machen, das ihre Fachwerk falsch sei?! Den Profis?!</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 19:45:19 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765204#m1765204 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765204#m1765204 <p>moin,</p> <p>@pl ich muss mich bei Dir Entschuldigen <em>WIE</em> abfällig ich Dir <a href="https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765187#m1765187" rel="noopener noreferrer">hier</a> geantwortet habe, aber nicht <em>DAS</em> ich dich dir geantwortet habe. Das war anstandslos von mir. Der Informationsgehalt, den ich Dir geantwortet habe, ist Sinngemäß, das was ich Dir schon übermitteln wollte. Ich hoffe du nimmst das Sachlich auf .</p> <p>lgmb</p> <p><em>P.S.: Bezogen auf den Diskusionsgegenstand "Klassenmethode" im Instanziierung Kontext mit Magic Methods: Fals Du einfach nur Begriffe verwechselt hast, wie ich es permantent tue, dann wäre es klar und einleuchtend, das wir uns Missverstehen . Dann mach das aber bitte, bitte deutlich, zur Klärung von Missverständnissen. Ich hab da leidvolle Erfahrungen gemacht ud mache sie immer noch bis an mein lebensende </em></p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 09:06:33 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765152#m1765152 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765152#m1765152 <p>Tach!</p> <blockquote> <p>Selbstverständlich gilt der Begriff <code>statische Klasse</code> für alle Programmiersprachen.</p> </blockquote> <p>Nein. Wenn man verhindern kann, dass Instanzen erstellt werden können, macht das die Klasse noch lange nicht statisch. Sie fühlt sich nur von außen so an.</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token variable">$bar</span> <span class="token operator">=</span> <span class="token number">42</span><span class="token punctuation">;</span> <span class="token keyword">private</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Foo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$foo</span> <span class="token operator">=</span> <span class="token class-name static-context">Foo</span><span class="token operator">::</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$foo</span><span class="token operator">-></span><span class="token property">bar</span><span class="token punctuation">;</span> </code></pre> <p>Du kannst eine Klasse mit private Konstruktor nicht selbst instantiieren, aber Mitglieder der Klasse können das weiterhin. Somit kann die Klasse nicht statisch im engeren Sinne sein.</p> <p>dedlfix.</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 09:08:37 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765153#m1765153 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765153#m1765153 <p>moin,</p> <blockquote> <p>Selbstverständlich gilt der Begriff <code>statische Klasse</code> für alle Programmiersprachen.</p> </blockquote> <p>Aber daß Deine hier vorgestellte Klasse nicht so bezeichnet werden kann hat ja damit nichts zu tun.</p> <p>MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 10:57:50 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765184#m1765184 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765184#m1765184 <p>moin,</p> <blockquote> <p>Du meinst <em>Singleton</em>? Nein, das nicht zwangsläufig das Gleiche. […] Jeder Aufruf von DoSomeWork erzeugt eine neue Foo-Instanz und gibt sie zurück. Kein Singleton zu sehen.</p> </blockquote> <p>Warum nicht statische Klassen wählen?</p> <blockquote> <p>Im Übrigen möchte ich vor Übereifer im Software-Tango warnen: <a href="https://www.imdb.com/title/tt0053291/" rel="nofollow noopener noreferrer">Daphne, you're overengineering again!</a></p> </blockquote> <p>Danke Dir für die Warnung. <a href="/users/3751" class="mention registered-user" rel="noopener noreferrer">@1unitedpower</a> hat mich auch schon gewarnt. Ich halt mich ja auch bedingt dran aber, ziel des Projektes ist…</p> <ol> <li>mich durch das Projekt zu profilieren</li> <li>Design Aspekte am Beispiel zu erlernen und anwenden</li> <li>ein vollständiges Projekt zu liefern <em>(abgesehen von der Terminierung was gefühlte ewigkeit in anspruch nimmt)</em>.</li> </ol> <p>in sofern ist es schon ok .</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 10:43:59 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765181#m1765181 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765181#m1765181 <p>Hallo dedlfix,</p> <p>möchtest Du Herrn Ratzinger etwas über Dogmen erklären?</p> <p>Angesichts der Tatsache, dass PHP das Konzept einer statischen Klasse nicht mit Sprachmitteln unterstützt, bleibt doch nur Duck-naming übrig.</p> <p>Eine Klasse, die ich nicht instanziieren kann, die nur statische Methoden aufweist (plus einen privaten Konstruktor) und bei der auch intern, von den statischen Methoden, keine Instanzen erstellt werden, ist nach allen relevanten Kriterien eine statische Klasse.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 11:04:48 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765185#m1765185 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765185#m1765185 <p>moin,</p> <blockquote> <p>möchtest Du Herrn Ratzinger etwas über Dogmen erklären?</p> </blockquote> <p> </p> <blockquote> <p>Angesichts der Tatsache, dass PHP das Konzept einer statischen Klasse nicht mit Sprachmitteln unterstützt, bleibt doch nur Duck-naming übrig.</p> </blockquote> <p>Ich kenn Duck-Type. Was ist Duck-Naming???</p> <p>lgmb</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 12:26:25 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765188#m1765188 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765188#m1765188 <p>Hallo MB,</p> <p>och komm schon. Wenn Dir duck-typing ein Begriff ist, dann solltest du das doch auf duck-naming übertragen können.</p> <p>Ist doch nur eine andere Anwendung des <a href="https://de.wikipedia.org/wiki/Ententest" rel="nofollow noopener noreferrer">Ententests</a>.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 14:42:23 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765195#m1765195 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765195#m1765195 <p>moin,</p> <blockquote> <blockquote> <p>Genso so ruft man Klassenmethoden auf, mit dem <code>T_PAAMAYIM_NEKUDOTAYIM</code>, also dem doppelten Doppelpunkt. PHP verrät infolge dieser Fehlermeldung daß der Konstruktor eine Klassenmethode ist und <code>new</code> nur ein Wrapper (Fascade).</p> </blockquote> <p>Sry, nur zum mitschreiben: durch dieses <code>T_PAAMAYIM_NEKUDOTAYIM</code> Indiz leitest du ab, das <code class="language-php"><span class="token function">__construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code> eine Klassenmethode sei,</p> </blockquote> <p>Zum Erstellen einer Instanz braucht man eine Klassenmethode. Eine Klassenmethode wird über den Namen der Klasse aufgerufen, logisch denn die Instanz muss ja erst erstellt werden.</p> <p>Insofern darf man <code>__contruct()</code> auch als eine Klassenmethode betrachten. Wenn Du notierst</p> <pre><code class="block language-php"><span class="token variable">$f</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Foo</span><span class="token punctuation">(</span><span class="token variable">$opts</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>nimmt <code>new</code> sogar den Namen der Klasse als Methode an, nämlich um die Argumente <code>$opts</code> zu übergeben. Und wenn Du Dich an frühere PHP Versionen erinnerst:</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span><span class="token punctuation">{</span> <span class="token keyword">function</span> <span class="token function-definition function">Foo</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$f</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Foo</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>findest Du genau diesen Sachverhalt wieder. Aber überlege doch mal selbst welche Methode Du als diejenige Klassenmethode bezeichnen würdest, welche die Instanz erstellt, <code>Foo()</code> oder <code>__construct()</code> oder <code>new</code>?</p> <p>Darüber lohnt es sich mal nachzudenken, es ist dem Verständnis für OOP sehr dienlich. MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Sat, 15 Feb 20 09:47:03 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765229#m1765229 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765229#m1765229 <p><a href="https://www.php.net/manual/de/language.oop5.decon.php" rel="nofollow noopener noreferrer">Siehe auch</a></p> <blockquote> <p>Um einen Vaterkonstruktor zu benutzen ist ein Aufruf von parent::__construct() innerhalb des Kindkonstruktors notwendig.</p> </blockquote> <p>Das heißt: <code>parent</code> ist ein Synonym für die Basisklasse. So wird der Konstuktor der Basisklasse eben mit dem Namen der Basisklasse aufgerufen und nicht mit einer Instanz der Basisklasse.</p> <p>Der Konstruktor der Basisklasse wird als Klassenmethode aufgerufen.</p> <p>MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 15:05:41 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765196#m1765196 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765196#m1765196 <p>Und hier noch was zum Spielen</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span><span class="token punctuation">{</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token variable">$a</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token constant">ARGS</span> <span class="token operator">=</span> <span class="token variable">$a</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">function</span> <span class="token function-definition function">new_instance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token keyword">self</span><span class="token punctuation">(</span><span class="token function">func_get_args</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$f</span> <span class="token operator">=</span> <span class="token class-name static-context">Foo</span><span class="token operator">::</span><span class="token function">new_instance</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"># rufe eine Klassenmethode</span> <span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$f</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Das gibt aus Foo <span class="token keyword type-declaration">Object</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token constant">ARGS</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token keyword">Array</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">1</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">2</span> <span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span> <span class="token operator">=></span> <span class="token number">3</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> </code></pre> <p>Hier haben wir eine explizite Klassenmethode welche die Instanz liefert. Als einen Wrapper für <code>__construct()</code> und <code>new</code>!</p> <p>MFG</p> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 15:14:25 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765197#m1765197 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765197#m1765197 <p>Du redest mal wieder Blödsinn.</p> <p>Konstruktoren in PHP sind keine statischen Methoden, sonst hätten sie keinen Zugriff auf <code>$this</code>, was ziemlicher Unfug wäre. Man kann es aber auch einfach überprüfen:</p> <pre><code class="block language-php"><span class="token keyword">class</span> <span class="token class-name-definition class-name">Foo</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">__construct</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token variable">$class</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ReflectionClass</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Foo'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$method</span> <span class="token operator">=</span> <span class="token variable">$class</span><span class="token operator">-></span><span class="token function">getMethod</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'__construct'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$method</span><span class="token operator">-></span><span class="token function">isStatic</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span> </code></pre> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 18:14:50 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765203#m1765203 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765203#m1765203 <p>Tach!</p> <blockquote> <p>Aber überlege doch mal selbst welche Methode Du als diejenige Klassenmethode bezeichnen würdest, welche die Instanz erstellt, <code>Foo()</code> oder <code>__construct()</code> oder <code>new</code>?</p> </blockquote> <p>Die Konstruktor-Methode erstellt die Instanz nicht, auch keine andere (Klassen-)Methode. Das passiert aufgrund des Operators <code>new</code>. Die Konstruktor-Methode ist optional und kann schon deshalb nicht zuständig sein. Falls sie vorhanden ist - und dabei ist es egal, ob sie alt wie die Klasse heißt oder neu <code>__construct</code> - führt sie <em>nach der Instantiierung</em> zusätzliche Aktionen aus, die der Programmierer definiert hat.</p> <blockquote> <p>Darüber lohnt es sich mal nachzudenken, es ist dem Verständnis für OOP sehr dienlich.</p> </blockquote> <p>Eben. Man sollte beachten, dass Konstruktor und Destruktor nicht für das Erstellen und Beseitigen von Instanzen da sind. Die beiden Begriffe sind Verkürzungen für die Konstruktor-Methode und die Destruktor-Methode, und sie erledigen zusätzliche Aufgaben <em>nach</em> der Instantiierung respektive <em>vor</em> dem Entfernen des Objekts.</p> <p>dedlfix.</p> Gibt es einen Bezeichnung für Art von Klasse? Sat, 15 Feb 20 11:17:34 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765236#m1765236 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765236#m1765236 <p>Hallo pl,</p> <p>hier haben wir <strong>keine</strong> Klassenmethode, sondern eine Instanzmethode, die statisch aufgerufen wird.</p> <h3>Das Handbuch sagt: <a href="https://www.php.net/manual/en/language.oop5.static.php#language.oop5.static.methods" rel="nofollow noopener noreferrer">Nicht nachmachen!</a></h3><p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Gibt es einen Bezeichnung für Art von Klasse? Fri, 14 Feb 20 15:35:49 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765198#m1765198 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765198#m1765198 <blockquote> <p>Du redest mal wieder Blödsinn.</p> </blockquote> <p>Don't mess with him. He's a stable genius.</p> <div class="signature">-- <br> Stur lächeln und winken, Männer! </div> Gibt es einen Bezeichnung für Art von Klasse? Sat, 15 Feb 20 06:28:30 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765212#m1765212 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765212#m1765212 <p>moin,</p> <p>es gibt keinen Grund für Deinen Kniefall. Und was die Begriffe betrifft, di sind eigentlich gar nicht so wichtig, denn es kommt darauf an das Wesentliche zu verstehen.</p> <p>Und dafür muss man in seinem Hinterkopf gewisse Vorstellungen entwickeln, ja sogar Bilder projezieren die von der Realität abweichen. Wie z.B. die Vorselung daß OOP die Lehre von Äpfeln und Birnen ist. Oder versuche Dir mal bildlich vorzustellen wie ein Byte aussieht. Und dann erkläre mal einem was ein Byte ist.</p> <p>Und siehst Du, wenn Letzteres nicht funktioniert ist das nicht schlimm. Du selber musst damit klarkommen, darauf kommt es an.</p> <p>Alles Gute!</p> Gibt es einen Bezeichnung für Art von Klasse? Sat, 15 Feb 20 07:16:57 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765215#m1765215 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765215#m1765215 <p>Hallo,</p> <blockquote> <p>Und was die Begriffe betrifft, di sind eigentlich gar nicht so wichtig,</p> </blockquote> <p>Wenn man Eigenbrötler sein und bleiben will, ok.<br> Aber sobald man sich mit anderen über das Thema austauschen will, z. B. in einem Forum oder wo auch immer, dann benötigt man die Begriffe in genau der Bedeutung wie sie üblich ist.</p> <p>Gruß<br> Kalk</p> Gibt es einen Bezeichnung für Art von Klasse? Sat, 15 Feb 20 13:57:07 Z https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765245#m1765245 https://forum.selfhtml.org/self/2020/feb/13/gibt-es-einen-bezeichnung-fur-art-von-klasse/1765245#m1765245 <p>moin,</p> <blockquote> <p>es gibt keinen Grund für Deinen Kniefall.</p> </blockquote> <p>Danke. Für michselbst ist es aber wichtig.</p> <blockquote> <p>Und was die Begriffe betrifft, di sind eigentlich gar nicht so wichtig, denn es kommt darauf an das Wesentliche zu verstehen.</p> </blockquote> <p>Ich sehe es exakt ie <a href="/users/3962" class="mention registered-user" rel="noopener noreferrer">@Tabellenkalk</a> es sieht. Wenn man sein dein Eigener Herr ist, ist es ok, weil einem keiner Dazwisdchen grätscht. Aber wenn man im Team arbeiten muss odser will, sind die Begriffe extrem Wichtig! Ich selbst habe es als Untergebener am eigenen Leib erfahren, weil mein Vorgesetzer völlig falschen Begriffe verwendet hat und mich dann anraunzt, Obwohl er sehr kollegial und kolant ist.</p> <blockquote> <p>Und dafür muss man in seinem Hinterkopf gewisse Vorstellungen entwickeln, ja sogar Bilder projezieren die von der Realität abweichen. […]</p> </blockquote> <p>Genau deswegen gibts die Fachsprache. Die Ausdrücksinhalt müssen genau für alle definiert sein, damit man eine reibungslose Kommunikation hat, sonst sind Missverständnisse vorprogrammiert. Und dann wird das Ergebnis falsch, weil eben Missverständnisse auftraten die von keinem entlarvt wurden <em>(Worst Case)</em>.</p> <blockquote> <p>Alles Gute!</p> </blockquote> <p>Wünsch ich Dir auch </p> <p>lgmb</p>