WebTec PHP 5

Messer Klausurfragen Vertiefung

Messer Klausurfragen Vertiefung


Kartei Details

Karten 20
Sprache Deutsch
Kategorie Informatik
Stufe Universität
Erstellt / Aktualisiert 24.03.2018 / 24.03.2018
Weblink
https://card2brain.ch/box/20180324_webtec_php_5
Einbinden
<iframe src="https://card2brain.ch/box/20180324_webtec_php_5/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

1. Wie sieht bei PHP die Konstruktion für einen Namensraum, der sich auf die gesamte Datei bezieht, aus?

Die Definition eines Namensraumes, der sich auf die ganze Datei bezieht, darf im PHP-Code nicht in geschweiften Klammern geschrieben werden und muss am Dateianfang stehen:

In diesem Fall kann nur ein Namensraum definiert werden.

2. Welchen Sinn haben Namensräume? Gibt es etwas Vergleichbares auch in Java?

Ein Namensraum im PHP-Code ist ein Bereich der mit einem eindeutigen Namen versehen ist. Dieser kann mehrere Klassen, Funktionen oder Konstanten (von PHP oder Drittanbietern) enthalten, die über den Namensraum in verschiedenen Projekten/Teilprojekten wiederverwendet werden können.

Die Packages in Java sind vergleichbar, da diese über ihre Klassenzugehörigkeit in anderen Java-Klassen wiederverwendet werden können.

3. Wie wird auf eine Methode eines anderen Namensraumes zugegriffen?

Für eine Klasse:
use \NameNamensraum2\Klassenname;

Für eine Funktion (bzw. eine Methode):
use function \NameNamensraum2\Funktionname;

Bei beiden könnte man den Zusatz „as XXX“ damit im Projekt einen neuen Namen vergeben wird, mit dem man dann die einzelnen Aufrufe macht.

4. Wie lassen sich in PHP anonyme Funktionen definieren und wie aufrufen?

Anonyme Funktionen haben keinen Namen, sind ansonsten aber normale Funktionen. Bei der Definition einer anonymen Funktion wird diese einer Variable zugewiesen.

Anonyme Funktionen werden häufig für zur Generierung von Callback-Parametern genutzt. Beispielsweise zur Weitergabe des Ergebnisses einer Funktion an eine Andere

5. Wenn eine anonyme Funktion Zugriff auf eine globale Variable haben soll, ist eine besondere Definition erforderlich, welche?

Hier wird der aktuelle Wert der Variablen zum Zeitpunkt der Definition der Funktion festgehalten. Daher ist das Ergebnis „Hello World“ und nicht „Bye Bye World“.

Derartige Funktionen werden Closures genannt.

Man könnte aber auch mit dem Identifier „global“ arbeiten.

6. Anonyme Funktionen mit Zugriff auf eine globale Variable haben eine Besonderheit, die sich auf Änderungen der globalen Variablen bezieht, welche?

Kurz → mit „use …“ wird der Wert der Variable zum Zeitpunkt der Funktionsdefinition übergeben!

7. Wie wird das automatische Laden von Klassen ohne explizites "include_once" in der modernen Form realisiert? Skizzieren Sie ein Beispiel dazu. Wie verläuft dann das Laden von Klassen?

 

Man registriert erst mal die Funktion „loader“ im Stapel.

PHP wird dann bei der Erzeugung von „MyClass“ automatisch die Funktion „loader“ aufrufen. Diese bindet dann die Datei „Myclass.php“, falls existent, ein. Nun wird PHP nochmal versuchen, ein Objekt der Klasse „MyClass“ zu erzeugen. Gelingt dies immer noch nicht, wird ein Standardfehler angezeigt, dass die Klasse nicht geladen werden konnte.

8. Worin besteht die wesentliche Idee von Unit-Tests ganz allgemein?

Unit-Tests werden in der Softwareentwicklung angewendet, um die funktionalen Einzelteile (Units) von Computerprogrammen zu testen, d. h., sie auf korrekte Funktionalität zu prüfen.

Die Unit-Tests sind in der Regel vollständig automatisiert, bzw. sin selbst ein Programm, dessen Ausführung nicht mehr Aufwand als einen Knopfdruck erfordert. Dabei ist es üblich, dass der Test in der gleichen Sprache wie das Testobjekt geschrieben wird.

9. Was bewirken bei PHPUnit (und auch JUnit) folgende Routinen: setUp() und tearDown()? Wann werden diese Routinen aufgerufen?

?

10.Was ist das Besondere an der Methode des Test Driven Development (TDD)?

TDD → Test Driven Development

Bei dieser Methode werden zuerst die Testfälle definiert, dann die zu testende Klasse realisiert. Das heißt, die Programmierung ist an den Testfällen orientiert und nicht andersrum.

11.Bei PHPUnit gibt es Testklassen, die nur unter einer Bedingung aufgerufen werden, welcher?

Der Name der Testklasse muss mit „test“ enden und muss der Dateiname dem Klassennamen entsprechen.

Beispiel:

  • zu testende Klasse → „Percent“
  • Testklasse → „PercentTest“

12.In den Testklassen werden Testmethoden erwartet, die PHPUnit nur unter einer bestimmten Bedingung aufruft, welcher?

Die Testmethoden müssen mit „test“ beginnen.

Beispiel: testGetPercent()

13.Welche Sinn haben bei PHPUnit die assert-Routinen?

Mit Hilfe von assert*()-Routinen werden Ergebnissen geprüft. Diese Routinen sind in den Testmethoden enthalten. Beispiele:

o   $this -> assertTrue($bool);/assertFalse($bool) → prüft ob true oder false

o   $this -> assertEquals($expected, $actual) → vergeicht auf ein erwartetes Ergebnis

14.Wann erscheint bei PHPUnit nach einem Testlauf ein roter und wann ein grüner Balken? Bitte geben Sie eine genaue Bedingung an (es gibt dazu drei Fälle).

●      Grün → wenn der Testfall erfüllt wird, bzw. dem erwarteten Ergebnis entsprochen wird.

●      Rot → wenn der Testfall nicht erfüllt wird oder der Testfall ignoriert bzw. gesprungen wird.

Für Tests, die eine debug-Eigenschaft aktiviert haben, wird auch die Farbe rot angezeigt.

(Felix → rot wird auch für die Tests angezeigt, die ignoriert wurden)

15.Was macht bei PHPUnit der Testrunner?

Der Testrunner ist eine Art Treiber, der die einzelnen Tests automatisch nacheinander aufruft. Ablauf: unter 9. beschrieben.

16.Mit welcher Konstruktion testet PHPUnit, dass die zu testende Klasse eine erwartete Exception geworfen hat, d.h. das Fehlen der Exception ist ein Fehler?

$this-> expectException($class);

Eine Exception $class wird erwartet.

Beispiel:

$this-> expectException($InvalidArgumentException::class);

InvalidArgumentException::class bedeutet, dass hier ein Deskriptor für eine Klasse übergeben wird. Dies ist die erwartete Klasse bzw. das erwartete Objekt von dieser

Klasse. (::class gehört zum Bereicht der Reflexion).

17.Was macht in PHP die assert()-Routine?

Prüft einen übergebenen Ausdruck auf TRUE und zeigt andernfalls einen Fehler an. Ist der Ausdruck korrekt, wird keine Meldung angezeigt.

18.Für welche Anwendungsfälle kann bzw. sollte in PHP die assert()- Routine benutzt werden?

assert() sollte nur zum Debuggen des Codes verwendet werden. Es kann für Plausibilitätsprüfungen verwendet werden, um auf Bedingungen zu prüfen, die immer TRUE sein sollten, und die andernfalls Programmierfehler anzeigen, oder um auf die Verfügbarkeit bestimmter Merkmale, wie Erweiterungsfunktionen oder bestimmte Systembeschränkungen und Eigenschaften, zu prüfen.

Zusicherungen sollten nicht für normale Laufzeitoperationen wie die Überprüfung von Eingaben verwendet werden. Als Faustregel sollte der Code immer korrekt funktionieren können, auch wenn die Zusicherungsüberprüfung deaktiviert ist.

19.Wenn Sie in PHP die assert()-Routine sehr häufig programmiert haben, verlangsamt deren Ausführung die Ausführung. Was können Sie dagegen tun?

Man könnte die assert-Überprüfungen ausschalten. Es gibt 2 Wege:

●      Durch das Setzen von Konfigurationsdirektiven → init_set(‚zend.assertions‘, 0)

●      Mit assert_options() → assert_options(ASSERT_ACTIVE, 0)

20.Gibt es in Java auch assert()-Routinen? Und in JavaScript?

In Java vorhanden, in JavaScript nicht.