12 Stimmen

PHP-Namensraum 5.3 und WordPress-Widget

Ich verwende Namespaces.

Ich versuche, ein WordPress-Widget zu erstellen (http://codex.wordpress.org/Widgets\_API)

Mit Namespaces gibt es einen Fehler, weil die Argumente nicht übergeben werden können (und ohne Namespaces funktioniert es natürlich wie gewohnt)

 namespace a\b\c;
 class whatever extends \WP_Widget {
   function whatever() {
     parent::WP_Widget('name1', 'name2');
   }
 // .. other functions left out
 }
 add_action('widgets_init',
 create_function('', 'return register_widget("a\b\c\whatever");'));

ähm... was ist die korrekte Syntax für "parent::WP_Widget" unter Verwendung von Namespaces?

(die KOMPLETTE Fehlermeldung lautet:

Warning: Missing argument 2 for WP_Widget::__construct(), called in 
C:\xampp\htdocs\wp2\wp-includes\widgets.php on line 324 and defined in 
C:\xampp\htdocs\wp2\wp-includes\widgets.php on line 93

)

Und der Debugger zeigt an, dass nichts übergeben wurde:

Variables in local scope (#14)
$control_options = Undefined
$id_base = boolean false 
$name = Undefined
$widget_options =  Undefined

(nur der $Name ist erforderlich)

1 Stimmen

Stellen Sie die genaue Fehlermeldung hier ein. Wenn man sich den Code anschaut, sieht es nicht so aus, als ob etwas falsch wäre. Warum verwenden Sie außerdem parent und nicht einfach $this->WP_Widget? Und schließlich, ist WP_Widget ein Konstruktor der WP_Widget-Klasse? Warum hat die Funktion den gleichen Namen wie die Klasse? Wenn es ein Konstruktor ist, dann besser __construct() verwenden.

0 Stimmen

Nein: es gibt sie, die Widget-Fabrik ist Teil von WordPress seit 2.8: wenn Sie in Eclipse auf WP_Widget klicken, erhalten Sie die Definition, in der sie sich befindet ... core.svn.wordpress.org/trunk/wp-includes/widgets es SOLLTE überschrieben werden und nicht durch _construct, siehe Quellcode (kann nicht helfen, habe es nicht geschrieben)

0 Stimmen

@dmitri: sowohl parent::WP_Widget als auch $this->WP_Widget liefern den gleichen Fehler, beide Varianten werden im Web verwendet. WP_Widget ist die Funktion, die nach dem CODEX überschrieben werden sollte.

-1voto

Dmitri Punkte 32172

Ich benutze Wordpress nicht, aber wenn ich mir das hier ansehe, sieht es so aus, als ob es an einem sehr schlechten Design von Wordpress liegt. Sie scheinen die statische Funktion WP_Widget zu verwenden, die als Fabrik dient, aber denselben Namen wie der Klassenname hat. Sie hätten sie nennen sollen Werk wenn es wirklich nur eine Fabrik ist.

Auch von dem, was Sie in Ihrem Kommentar gepostet, vielleicht müssen Sie eine statische Funktion WP_Widget() in Ihrer Unterklasse zu erstellen und dann nicht einmal die Eltern aufrufen. Wenn das Skript wirklich will, dass du WP_Widget überschreibst, dann solltest du das tun.

Aber wie gesagt, ich habe noch nie Wordpress benutzt, es ist schwer zu sagen, ohne sich das Skript anzusehen.

Sie sollten den genauen Fehlercode hier angeben.

0 Stimmen

Ich habe den kompletten genauen Fehlercode gepostet, ich kann den Stack-Trace hinzufügen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X