TagPHP

Online PHP IDE mit Smart Code Completion

Berufsbedingt arbeite ich derzeit an zwei verschiedenen Laptops, wobei ich auf einem keine Administratorenrechte besitze. Da nicht immer beide Laptops mitnehmen möchte, bzw. grundsätzlich angehalten bin, auf dem Laptop ohne Administratorenrechte keine fremde Software zu installieren, suche ich nach einer passenden Online IDE. Nachdem ich jetzt ein paar Sachen ausprobiert habe, eine Zusammenfassung meiner Erfahrungen im Bereich Online PHP IDE mit Smart Code Completion.

Arten von Online IDEs

Grundsätzlich gibt es zwei verschiedene Arten von Online IDEs:

  • Cloud IDE: Unter einer Cloud IDE verstehe ich Angebote wie bspw. Cloud9 (https://c9.io/) oder Codio (https://codio.com).
  • Self-Hosted IDE: Es finden sich im Internet auch eine Reihe von Download-Paketen für den eigenen Server wie bspw. Codiad (http://codiad.com/) oder ICEcoders (https://icecoder.net/).

Unabhängig ob online Cloud IDE oder online Self-Hosted IDE im Gegensatz zu offline IDEs wie bspw. Eclipse oder Netbeans sind die online Varianten oft kostenpflichtig bzw. gibt es verschiedene Pakete.

Außerdem bin ich noch auf eine dritte Art von “Online IDE” gestoßen, die ich bisher jedoch noch nicht getestet habe. Bei TheNextWeb (http://thenextweb.com/google/2013/11/21/google-building-chrome-app-based-development-environment-using-dart-polymer/) wird über ein IDE-Plugin berichtet, welches direkt im Chrome Browser läuft – Chromedeveditor (https://github.com/dart-lang/chromedeveditor). Aus der Beschreibung wird nicht ganz klar ob damit nur JavaScript und Dart Anwendungen geschrieben werden können oder ob auch andere Sprachen unterstützt werden.

Code Completion vs. Code Intelligence

Zunächst hatte ich geglaubt, dass mein gesuchtes Feature unter dem Begriff “Code Completion” existiert. Jedoch bezeichnet Code Completion nur das Feature, das bereits bekannte PHP-Funktionen, wie bspw. “substr” und “substr_count” bei der Eingabe von “sub” und dem gleichzeitigem Drücken von “STRG” + “Leertaste” entsprechend vorgeschlagen werden.

Code Completion in Netbeans

Code Completion in Netbeans für PHP Standardfunktionen

Dies wird oftmals einfach über eine zuvor definierte XML-Datei erreicht und erfordert kein Code Verständnis.

Durch einen Artikel bei StackOverflow (http://stackoverflow.com/questions/1738696/php-ide-with-best-code-completion) habe ich dann gemerkt, dass ich mindestens nach “Smart Code Completion” bzw. “Code Assistance” oder auch “IntelliSense” suchen muss.

Online PHP IDE mit Smart Code Completion aka Code Assistance aka IntelliSense

Verwöhnt von den offline IDEs Eclipse PDT (https://eclipse.org/pdt/) und Netbeans (https://netbeans.org) bin ich auf der Suche nach einer Online IDE, die neben Code Completion, auch Smart Code Completion aka Code Assistance aka IntelliSense beherrscht.

In praktischen Tests mit c9, Codio und ICEcoders war keine der Online IDEs in der Lage mir die passenden zugehörigen Methoden eines selbst definierten Objektes vorzuschlagen. Entweder es gibt grundsätzlich keine Vorschläge oder nur die Standard-PHP-Funktionen oder einfach alle Funktionen unabhängig ob sie zum jeweiligen Objekt gehören. Besonders bei der Objektorientierten Programmierung (OOP) ist das Vorschlagen der passenden Methoden besonders hilfreich für eine schnelle und fehlerfreie Programmierung. Außerdem wird neben dem reinen Methodennamen, wenn entsprechend angegeben, auch die Dokumentation zu den jeweiligen Variablen angezeigt und auf korrektes Type Hinting (http://php.net/manual/de/language.oop5.typehinting.php) geachtet.

Online PHP IDE mit Smart Code Completion gesucht wie in Netbeans für selbst definierte Methoden

Smart Code Completion

Weitere Links

Für weitere Informationen bzgl. Online PHP IDE mit Smart Code Completion ist der englischsprache Wikipedia-Artikel Comparison of JavaScript-based source code editors lesenswert. In diesem wird nochmals dargestellt, welche Editoren hinter den oben genannten Online IDE Diensten stecken und über welche Funktionen diese verfügen. Die Smart Code Completion aka Code Assistance aka IntelliSense ist in der Features-Liste bisher noch nicht erwähnt, wodurch es immer auf den konkreten Einzeltest ankommt.

Für Hinweise in den Kommentare bzgl. weiterer möglicher Kandidaten von Online PHP IDE mit Smart Code Completion würde ich mich wirklich freuen, gerne auch kostenpflichtige Angebote.

PHP Unterschied zwischen == und ===

Seit PHP4 gibt es die Möglichkeit einen typsicheren Vergleich durchzuführen, dazu wird einfach ein weiterer Vergleichsoperator “=” angehängt. Neben dem reinen Wert wird somit auch der Typ verglichen, wodurch die Typ-Sicherheit verbessert wird. Das folgende PHP-Beispiel erscheint zwar trivial und soll zunächst nur mal den Unterschied verdeutlichen. Wichtig ist ein typsicherer Vergleich bei der Verwendung von eigenen Objekten und Validierung von Benutzereingaben.

[php]
<?php

$a = 1; // int
$b = "1"; // string

var_dump($a);
var_dump($b);

if($a == $b){
echo "Typ-unsicher!";
}

echo "\n";

if($a === $b){

}else{
echo "Typ-sicher!";
}
[/php]

Die Ausgabe ist:

[php]
int(1)
string(1) "1"
Typ-unsicher!
Typ-sicher!
[/php]

PHP typsicherer Vergleich: Ungleich und doch gleich

Die Erweiterung der Vergleichsoperatoren um Typsicherheit ist auch bei weiteren Vergleichen möglich, wie bspw. ungleich:

[php]
if($a != $b){

}else{
echo "A ist gleich B";
}

if($a !== $b){
echo "A ist ungleich B";
}
[/php]

Dieses Beispiel verdeutlicht nochmals was Typsicherheit bedeutet, A hat zwar den selben Wert wie B, aber die Variablen sind nicht vom selben Typ.

Eine Übersicht für alle PHP Vergleichsoperatoren gibt es bei PHP.net

PHP: Unterschiede zwischen && vs. &

Nachdem der Java Post zu dem Thema ein großer Erfolg war, möchte ich gerne zeigen, das es sich für PHP mit && vs. & genauso verhält. Wie bereits geschrieben, das Beispiel ist grundsätzlich unabhängig von der verwendeten Programmiersprache. Nachdem der zu dem Thema ein großer Erfolg war, möchte ich gerne zeigen, das es sich für PHP mit && vs. & genauso verhält. Wie bereits geschrieben, das Beispiel ist grundsätzlich unabhängig von der verwendeten Programmiersprache.

Continue reading

Call to undefined method GeneralUtility::readLLXMLfile()

Eine Aktualisierung von der TYPO3 CMS Version 4.5 LTS auf die 6.2 LTS wird wahrscheinlich die Tage häufiger durchgeführt, da es sich um die LTS-Versionen handelt und bei der 4.5 der Support ausläuft. Besonders wenn viele Extensions installiert sind, kann der Umstieg mehr als holprig werden. In diesem Fall kam es im Backend zu einer Fehlermeldung, wenn man neue Inhalte anlegen wollte:

Fatal error: GeneralUtility::readLLXMLfile

Folgende Fehlermeldung wird angezeigt, wenn auch ggf. in einer anderen Datei:

Fatal error: Call to undefined method TYPO3\CMS\Core\Utility\GeneralUtility::readLLXMLfile() in class.tx_xyz_wizicon.php on line 65

Glück im Unglück, die Fehlermeldung ist sehr sprechend und es ist auch gleich der Dateiname und die Zeilennummer angegeben, wodurch die Behebung schnell durchgeführt werden kann.

Der Fix: makeInstance(‘t3lib_l10n_parser_Llxml’)

Einfach in die angezeigte Datei wechseln und mittels Strg+F die entsprechende Stelle suchen und folgende Ersetzung durchführen:

// $LOCAL_LANG = t3lib_div::readLLXMLfile($llFile, $GLOBALS['LANG']->lang);
$parser = t3lib_div::makeInstance('t3lib_l10n_parser_Llxml');
$LOCAL_LANG = $parser->getParsedData($llFile, $GLOBALS['LANG']->lang);

Anschließend den Cache leeren und erneut Testen, ggf. kommt in einer Datei der Aufruf mehrmals vor, bzw. in vielen unterschiedlichen Dateien.

Gefunden hier: http://forge.typo3.org/issues/44413

Eine weitere Problematik ist häufig die Depraction-Meldung bzgl. Split().

[random_content group_id=”211″ num_posts=”1″]

Notice: wpdb::escape ist seit Version 3.6 veraltet!

Bei der Aktualisierung einer WordPress Installation von 3.5 auf 3.6 erschien folgende Meldung mehrfach auf dem Dashboard


Notice: wpdb::escape is deprecated since version 3.6! Use wpdb::prepare() or esc_sql() instead. in /var/www/web4/html/wordpress/wp-includes/functions.php on line 2871 Notice: wpdb::escape ist seit Version 3.6 veraltet! Benutze stattdessen wpdb::prepare() or esc_sql(). in /var/www/project/wordpress/wp-includes/functions.php on line 2871

In Zeile 2781 der Datei “functions.php” steht jedoch die Funktion, welche die Meldung ausgibt. Von dem escape-Aufruf ist weit und breit keine Spur. Mittels grep habe ich dann nach allem was ” escape(” beinhaltet gesucht und manuell ersetzt.


grep -r ' escape(' ./

Die Herausforderung ist, das als Ersatz für wpdb::escape zwei Funktionen genannt werden. Welche davon jetzt die Richtige ist, habe ich abhängig davon gemacht, ob die Eingabe nur ausgegeben werden sollte, dann wpdb::prepare, oder in die Datenbank gespeichert werden soll, dann esc_sql.

Nachdem ich alle Dateien “behandelt” hatte, mit der Dateiendung php, erschien weiterhin die Meldung auf dem Dashboard. Erst das Auskommentieren der gesamten “escape”-Funktion brachte eine neue Erkenntnis:


Warning: array_map() expects parameter 1 to be a valid callback, class 'wpdb' does not have a method 'escape' in /var/www/project/wordpress/wp-content/plugins/broken-link-checker/includes/link-query.php on line 295
Warning: implode(): Invalid arguments passed in /var/www/project/wordpress/wp-content/plugins/broken-link-checker/includes/link-query.php on line 300

Der eigentliche Übeltäter scheint somit die Erweiterung “Broker link Checker” zu sein. Nachdem diese deaktiviert wurde, verschwand die Meldung. Die angepassten Dateien habe ich unverändert gelassen.

Bei meinem grep wurde die Datei “link-query.php” nicht aufgeführt, da “escape” per array_map aufgerufen wurde:


$s_parser_type = array_map(array(&$wpdb, 'escape'), $s_parser_type);

© 2020 BugBlog.de

Theme by Anders NorénUp ↑