![]() |
Re: PHP Inspection Unit
Zitat:
Werde deinen neuen Release mal teste, aber das mit den falschen ergebnissen freut mich ja nicht so sehr :D mfg, DSeven |
Re: PHP Inspection Unit
Zitat:
das ergibt sich aus der Sache selbst. Wenn du ein gemischtes Dokument hast, z.B.
Code:
wird alles ab dem <? geparsed, da der PHP Tag nicht korrekt geschlossen ist.
<html>
<? include("abc.php"); <head> <title>Tolle Seite</title> </head> <body> Dolle Seite :)</p> </body> </html> Das könnte im schlimmsten Falle zu falschen Parsing ergebnissen führen. Wenn es ein reines PHP Dokument ist, gibt es damit natürlich keine Probleme :) mfG mirage228 |
Re: PHP Inspection Unit
Guten Tag,
Hab ich auch gerade gesehen. ich habe was anderes gedacht. Das ist natürlich normal :) Finde den release sehr gut vor allem schneller alls der alte. mfg, DSeven |
Re: PHP Inspection Unit
Hi
Zitat:
Als nächstes versuche ich mal das mit dem PHP Doc zu realisieren. Das sollte sich (hoffentlich) machen lassen :) mfG mirage228 |
Re: PHP Inspection Unit
Zitat:
mfg, mh166 |
Re: PHP Inspection Unit
Zitat:
schau mal hier: ![]() mfG mriage228 |
Re: PHP Inspection Unit
Guten Tag,
also ich finde die Funktion FindEntityAt ziemlich gut. Nur leider weis ich nicht was ich der funktionen übergeben muss? Wenn ich der funktion SelStar übergebe funktioniert es nicht. Was muss man der funktion übergeben? mfg, DSeven |
Re: PHP Inspection Unit
Zitat:
eigentlich muss der Funktion schon SelStart übergeben werden :gruebel: Bei Methoden in Klassen ist mir aufgefallen, dass PCRE den Index manchmal ein paar Zeichen davor bzw. am Anfang der Zeile anfangen lässt und daher TPHPEntity.TextPos da möglicherweise etwas ungenau ist :? Da werde ich noch einmal nach schauen müssen. mfG mirage228 Edit: FindEntityAt funktioniert natürlich nur korrekt, wenn der Text bereits geparsed wurde und nicht verändert wurde (da ansonsten die gespeicherten Positionen nicht mehr stimmen)! |
Re: PHP Inspection Unit
Guten Tag,
Gut und ich dachte schon ich mache was Falsch. Ich schicke der funktion also SelStart. Nur das problem es funktioniert nicht immer. Wenn der Cursor sich in einer Klassen Funktion befindet, bekomme ich bei einigen Funktionen die Klasse statt der funktion zurück. Warum? Edit: Ah und ich vermisse noch ein feature, währe nett wenn du es einbauen könntest undzwar das dein parser auch nach konstanten sucht. Danke mfg, DSeven |
Re: PHP Inspection Unit
Zitat:
PCRE beginnt den Match für Entities in einer Klasse aus irgendeinem Grund immer manchmal ein paar Zeichen vor dem eigentlichen Eintrag. Daher kann es am Ende von Funktionen vorkommen, dass diese nicht erkannt werden :? Da werde ich mir was überlegen müssen, aber ich weiss derzeit noch nicht, woran es liegt. Zitat:
mfG mirage228 |
Re: PHP Inspection Unit
Guten Tag,
Komisch warum das nur bei funktionen so ist. Klassen werden ja auch normal erkannt. mfg, DSeven |
Re: PHP Inspection Unit
Zitat:
Klassen und Funktionen, die nicht zu einer Klasse gehören werden bei mir auch korrekt erkannt. Der Haken ist aber bei Variablen und Funktionen in einer Klasse. Dort matched PCRE teils, wie gesagt, vom Anfang der Zeile an oder zumindest ein paar Zeichen davor. Ich nehme an, dass das irgendwas mit dem Zeilenumbruch an, der nicht als 2 Zeichen erkannt wird (also "class name{#13#10...}"), aber sicher kann ich das noch nicht sagen. Aber ich bin dabei und hoffe, dass sich das möglichst schnell (und einfach :) ) beheben lässt. mfG mirage228 |
Re: PHP Inspection Unit
Guten Tag,
Funktionen haben ja eine Variable Name wo nur der Name der funktion gespeichert ist, fände es super wenn es das gleiche für includes geben würde, wo nur die Datei gespeichert wird. mfg, DSeven |
Re: PHP Inspection Unit
Zitat:
meinst du sowas, wie eine "Filename" Eigenschaft für den eingebundenen Dateinamen? Wenn ja, dann würde sich das eigentlich machen lassen :stupid: - obwohl es ja zig Wege gibt so einen Include zu deklarieren... Ach ja, den Fehler mit dem falschen Index konnte ich beheben - das lag daran, dass ich 2 Matches zusammenkopiere und evtl. zwischen den 2 Matches noch zusätzliche Zeichen sind (#13#10 oder so). Das ist jetzt behoben. :) Konstanten funktionieren jetzt auch :) Neue Version gibt es hoffentlich noch heute *g* :mrgreen: mfG mirage228 |
Re: PHP Inspection Unit
Zitat:
Wow freue mich das du die anderen probleme beheben konntest. Freue mich auf den neuen release. mfg, DSeven |
Re: PHP Inspection Unit
Hi,
so die neue Version ist fertig - es ist die Version 1.8 :) Folgende Änderungen gibt es:
Die Beispielanwendung habe ich auch etwas verbessert :) Die Downloads finden sich, wie gehabt, im ersten Beitrag :) mfG mirage228 P.S.: Zum PHPDoc Support bin ich leider noch nicht gekommen :-( Edit: Schlechtschreibung und BB-Code-Tags :twisted: |
Re: PHP Inspection Unit
Endlich habe ich auch mal was Zeit gefunden, die Unit zu Testen und Nutzen. Dabei ist mir folgender Fehler aufgefallen. Wenn eine Variable den Begriff "include" enthält, wird sie als Include-Datei aufgelistet, hier ein Code zum Test aus dem phpBB (template.php):
Code:
MfG Pr0g
<?php
$include_last_iterator = 'Hallo Welt!'; ?> |
Re: PHP Inspection Unit
Zitat:
Danke erstmal fürs testen. Da hast natürlich recht - Da ist der RegEx anscheinend nicht konsequent genug, der matched alles, vom include (etc.) bis zu einem ;. Ich werde das beheben. :) mfG mirage228 |
Re: PHP Inspection Unit
Tipp: Schalte das Match für Variablen vor das für includes.
Die Unit schau ich mir heute Abend genauer an. Gruß |
Re: PHP Inspection Unit
Hi,
lol, habe die Lösung schon gefunden. :mrgreen: Im initialization beim Erstellen des Includes-RegEx einfach am Anfang des Strings ergänzen:
Code:
Damit darf kein $ vor dem include (etc.) auftauchen, damit es erkannt wird. ;)
[^$]
Die neuen Archive lade ich gleich hoch - sie sind sofort ab sofort verfügbar :) mfG mirage228 |
Re: PHP Inspection Unit
Super, funktioniert ;)
|
Re: PHP Inspection Unit
Zitat:
ersetze zusätzlich die Zeilen um Nr. 1586 durch dies:
Delphi-Quellcode:
, damit der Index der Includes wieder richtig ist ... oder du lädst das neue Archiv runter :)
FIncludes.Add(TPHPIncludeFile.Create(Self,
MatchColl2.Items[i].Value, MatchColl2.Items[i].Index + Index + 1)); // + 1 ! mfG mirage228 |
Re: PHP Inspection Unit
Guten Tag,
mir gefält die neue Version eigentlich ganz gut. Aber wollte noch anmerken das es konstanten ohne Klassenbezug gibt die ja momentan nicht erkannt werden. mfg, DSeven |
Re: PHP Inspection Unit
Guten Tag,
Also bei mir gibt er wenn ich folgendes aufrufe:
Delphi-Quellcode:
Immer die Klasse zurück. Naja ok bei der ersten Klasse gibt er mir wenn ich in einer funktion bin die Funktion zurück aber aber der zweiten klasse gibt er mir die klasse zurück. Warum?
phpParser.FindEntityAt(ActiveEdit.Editor.SelStart).Occurence;
Ahja und bei mir funktionieren die konstanten nicht habe sie wie folgt deklariert:
Code:
Aber die Konstante wird nicht erkannt.
class Foo {
const konstante = "Konstante"; } Edit: Habe Fehler gefunden, " wird nicht erkannt :D wenn man ' benutzt geht es. muss behoben werden. mfg, DSeven |
Re: PHP Inspection Unit
Hi,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ich werde mir das ganze nochmal zu Gemüte führen müssen ... mfG mirage228 |
Re: PHP Inspection Unit
Mir ist auch noch was aufgefallen. Wenn man nach einem Includebefehl das Semikolon mehrere Zeilen nach unten schiebt, so werden die Zeilenumbrüche (als schwarze Striche) mit aufgeführt:
Code:
Ist das Semikolon nicht vorhanden, wird einach das des nächsten Befehls genutzt, auch hier stimmt die Ausgabe dann wieder nicht. Vielleicht solltest du das Semikolon nur zur Überprüfung der Vorllständigkeit nutzen, oder so, hier jedenfalls der Code:
<?php
//Includetest include('test.php') ; ?>
Code:
<?php
//Includetest include('aaa') include('test2.php'); ?> |
Re: PHP Inspection Unit
Zitat:
Ok, das erste ist nen Fehler. Den kannst Du fürs erste beheben, indem Du im RegEx-String ein (\s*) vor das Semikolon packst. :) Das zweite hingegen ist syntaktisch nicht korrekt (wird auch von PHP bemängelt) - da muss ich schauen ob und wie ich das löse :? Die neue Version kommt, denke ich, heute abend noch, da ich den Fehler im FindEntityAt() Code und bei den Konstanten auch schon behoben habe. :) mfG mirage228 |
Re: PHP Inspection Unit
Zitat:
|
Re: PHP Inspection Unit
Zitat:
Ich könnte Dir folgenden "Kompromiss" anbieten: Ein Include-String wird gemachted, falls die Suchwörter (include etc.) gefunden wurden und für den Rest die folgenden Bedingungen zu treffen.
Andernfalls wäre der Match negativ. Edit: Das Ganze geht natürlich auf Kosten der Zeit. Daher weiss ich nicht, ob es sich lohnt. :gruebel: mfG mirage228 |
Re: PHP Inspection Unit
DSeven scheint ja auch Interesse an dem Projekt zu haben, vielleicht sagt er dazu noch was. Wenns zu sehr auf die Zeit geht, dann lass es erstmal so.
|
Re: PHP Inspection Unit
Zitat:
Ahja, habe gerade den Thread Deines Programmes gelesen und da bin ich auf Folgendes gestoßen: Zitat:
Werde den auch noch beheben. mfG mirage228 |
Re: PHP Inspection Unit
Zitat:
mfg, mh166 |
Re: PHP Inspection Unit
Zitat:
Also mit der neuen Version bin ich weitesgehend fertig, morgen früh lade ich es dann hoch - falls ihr nichts zu beanstanden habt :) mfG mirage228 |
Re: PHP Inspection Unit
Hi,
Jetzt gibt es wieder was Spannendes, mit Spiel und Schokolade :mrgreen: - Es ist die Version 1.9 :) Folgende Fehler habe ich berichtigt:
Die Downloads befinden sich, wie immer, im ersten Beitrag :) mfG mirage228 |
Re: PHP Inspection Unit
Guten Tag,
Also die version gefällt mir jetzt :) Werde es noch weiter Testen mal schauen. mfg, DSeven |
Re: PHP Inspection Unit
Guten Tag,
So habe einen Fehler gefunden. Undzwar funktioniert FindEntityAt immernoch nicht richtig. Ich bekomme im folgenden Code bei der aller letzten Funktion, die Funktion test ein nil zurück.
Code:
Ahja und hier der link zu den globalen Konstanten:
<?php
include('FJ'); class sql { // Variablen werden Deklariert var $server; var $user; var $pw; var $db; var $query; var $result; var $zaehler; // Funktion um eine Verbindung mit MySQL zu erstellen // und eine Datenbank auszuwählen function sql ($sql_server, $sql_user, $sql_pw, $sql_db) { // Variablen werden gesetzt // um sie in der class zu benutzen $this ->server = $sql_server; $this ->user = $sql_user; $this ->pw = $sql_pw; $this ->db = $sql_db; // Verbindung wird gesetzt Handle an Variable übergeben $connect = @mysql_connect($this ->server, $this ->user, $this ->pw); // Verbindung wird überprüft if (!($connect)) { // Falls keine Verbindung hergestellt werden konnte // wird ein Hinweis angezeigt echo "Keine News"; // exit; } else { // Falls Verbindung erfolgreich // wird die Datenbank ausgewählt @mysql_select_db($this ->db); return true; } } // Funktion zum verarbeiten von querys function myquery($query) { $this ->query = mysql_query($query); If ($this ->query) return True; else return False; } // Funktion zur leichteren Handhabung von // mysql_fetch Array function fetchArray($query) { $this ->query = mysql_query($query); $this ->result = mysql_fetch_array($this ->query); return $this ->result; } // Funktion zum auslesen des ganzen // Inhaltes protected function fetchMultiple($query) { $this ->query = @mysql_query($query); $this ->zaehler = 0; while ($this ->result = mysql_fetch_array($this ->query)) { $this->result_multiple[$this->zaehler] = array($this->result); $this->zaehler++; } return $this->result_multiple; } // MySQL Verbindung wird geschlossen private function close() { if (@mysql_close()) return True; else return False; } } ?> <?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } $obj = new BaseClass(); $obj = new SubClass(); ?> <?php class MyClass { public $public = "MyClass::public!\n"; protected $protected = "MyClass::Protected!\n"; protected $protected2 = "MyClass::Protected2!\n"; private $private = "MyClass::private!\n"; function printHello() { print "MyClass::printHello() " . $this->private; print "MyClass::printHello() " . $this->protected; print "MyClass::printHello() " . $this->protected2; } } class MyClass2 extends MyClass { protected $protected = "MyClass2::protected!\n"; function printHello() { MyClass::printHello(); print "MyClass2::printHello() " . $this->public; print "MyClass2::printHello() " . $this->protected; print "MyClass2::printHello() " . $this->protected2; /* Will result in a Fatal Error: */ //print "MyClass2::printHello() " . $this->private; /* Fatal Error */ } } $obj = new MyClass(); print "Main:: " . $obj->public; //print $obj->private; /* Fatal Error */ //print $obj->protected; /* Fatal Error */ //print $obj->protected2; /* Fatal Error */ $obj->printHello(); /* Should print */ $obj2 = new MyClass2(); print "Main:: " . $obj2->private; /* Undefined */ //print $obj2->protected; /* Fatal Error */ //print $obj2->protected2; /* Fatal Error */ $obj2->printHello(); ?> <?php abstract class AbstractClass { /* Force Extending class to define this method */ abstract protected function getValue(); /* Common method */ public function print2() { print $this->getValue(); } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { protected function getValue() { return "ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->print2(); $class2 = new ConcreteClass2; $class2->print2(); ?> <?php interface ITemplate { public function setVariable($name, $var); public function getHtml($template); } class Template implements ITemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{'.$name.'}', $value, $template); } return $template; } } ?> <?php class Setter { public $n; private $x = array("a" => 1, "b" => 2, "c" => 3); function __get($nm) { print "Getting [$nm]\n"; if (isset($this->x[$nm])) { $r = $this->x[$nm]; print "Returning: $r\n"; return $r; } else { print "Nothing!\n"; } } function __set($nm, $val) { print "Setting [$nm] to $val\n"; if (isset($this->x[$nm])) { $this->x[$nm] = $val; print "OK!\n"; } else { print "Not OK!\n"; } } } $foo = new Setter(); $foo->n = 1; $foo->a = 100; $foo->a++; $foo->z++; var_dump($foo); $sql = new sql('hallo1', 'hallo2', 'hallo3'); echo('Fjhgjghhjfghjfg'); function test($ein_test) { } ?> ![]() PHPEdit erkennt auf diese weise definierte Konstanten. mfg, DSeven |
Re: PHP Inspection Unit
Hi,
habe den Fehler gefunden. :? Es ist der selbe Fehler, den ich schon bei TPHPClassMethod behoben hatte :wall: - aber bei TPHPMethod hab ichs vergessen :oops: Das mit den defines habe ich auch noch mit mit hineingebracht :) Zudem habe ich eine kleinen Fehler bei den Includes behoben (habe das [^$] durch eine Assertion ersetzt (?<!\$) - Damit liefs bei mir auch etwas schneller :) ) Der Download der verbesserten Version ist im ersten Beitrag zu finden 8) mfG mirage228 |
Re: PHP Inspection Unit
Warum ist bei Konstanten kein "TextPos" verfügbar, fände gut, wenn das mit angegeben wird ;)
|
Re: PHP Inspection Unit
Zitat:
mfG mirage228 |
Re: PHP Inspection Unit
Hm, stimmt. Delphi hatte es nicht in der Liste aufgeführt (die spinnt manchmal), daher dachte ich es geht net. Aber was anderes. Aus irgend einem Grund ist "ConstantCount" immer 0. Woran kann das liegen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz