PHP 네임스페이스 5.3 및 WordPress 위젯
네임스페이스를 사용하고 있습니다.
WordPress 위젯(http://codex.wordpress.org/Widgets_API)을 작성하려고 합니다.
네임스페이스를 사용하면 인수를 전달할 수 없기 때문에 다음과 같은 오류가 발생합니다(네임스페이스를 사용하지 않으면 정상적으로 작동합니다).
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");'));
uhm... parent: 의 올바른 구문은 무엇입니까?네임스페이스를 사용하는 WP_Widget?
(COMPLETE 오류 메시지는 다음과 같습니다.
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
)
디버거에는 전달된 내용이 없습니다.
Variables in local scope (#14)
$control_options = Undefined
$id_base = boolean false
$name = Undefined
$widget_options = Undefined
($name만 필요)
여기에 있는 문서를 보면 이름만 필요한 것처럼 보이지만, PHP의 작동 방식도 사전 변수를 정의해야 합니다.
클래스를 만드는 방법에는 다음 두 가지가 있습니다.
- 답:
WP_Widget __construct ([string $id_base = false], string $name, [array $widget_options = array()], [array $control_options = array()])
- B:
WP_Widget WP_Widget ([ $id_base = false], $name, [ $widget_options = array()], [ $control_options = array()])
우선은 항상 다음 항목을 사용해야 합니다.__construct
오브젝트를 초기화하기 위한 메서드는 다음과 같이 코드를 고쳐 씁니다.
namespace a\b\c;
class whatever extends \WP_Widget
{
function __construct()
{
parent::__construct('name1', 'name2');
}
/*
* Other methods!
*/
}
그WP_Widget::WP_Widget(..)
메서드는 PHP4 전용이며 PHP 5 이상에서는 사용하지 마십시오.
네임 스페이스로서 PHP 5.3을 사용하고 있기 때문에, 다음의 조작을 실시할 수 있습니다.
add_action('widgets_init', function() {
return register_widget(new a\b\c\whatever);
});
당신의 문제는 네임스페이스에 없는 것 같습니다.다음 코드는 매력적으로 작용합니다.
<?php
namespace Foo;
class Bar {
function __construct( $foo ) {
echo "$foo\n";
}
}
namespace Foo\Bar;
class Foo extends \Foo\Bar {
function __construct( ) {
parent::__construct( "This should work." );
}
}
$foo = new \Foo\Bar\Foo( );
에러 메세지가 표시되는 경우는, 그 내용을 기술하는 것이 도움이 될 가능성이 있습니다.
부모 메서드를 호출하시겠습니까?간단하게 사용parent::MethodName();
부모 컨스트럭터를 호출하려면parent::__construct()
- 생성자의 이름이 클래스와 같을 경우 다음 이름으로 변경__construct
수년간 건설업자가 선호하던 이름인데...
이것은 나에게 잘 작동했다.
add_action('widgets_init', function() {
register_widget('\a\b\c\whatever');
});
PHP 네이티브를 사용할 수도 있습니다.get_class
method: 클래스 인스턴스화의 이름을 문자열로 반환합니다.
https://www.php.net/manual/en/function.get-class.php
register_widget(get_class(new \UCI\Wordpress\Widget\Footer()));
워드프레스는 사용하지 않습니다만, 이것을 보면 워드프레스의 디자인이 매우 나쁘기 때문이라고 생각됩니다.이들은 팩토리로서 기능하지만 클래스 이름과 동일한 이름을 공유하는 정적 함수 WP_Widget을 사용하는 것으로 보입니다.진짜 그냥 공장이라면 공장이라고 불러야죠.
또, 코멘트에 투고된 내용으로부터, 서브 클래스에 정적 함수 WP_Widget()을 작성하고 나서, 부모에게 전화조차 걸지 말아 주세요.스크립트가 정말로 WP_Widget을 덮어쓰기를 원하는 경우 다음과 같이 하십시오.
하지만 역시 워드프레스를 써본 적이 없어서 대본을 보지 않고는 알 수 없어요.
여기에 정확한 에러 코드를 게시해야 합니다.
언급URL : https://stackoverflow.com/questions/5247302/php-namespace-5-3-and-wordpress-widget
'programing' 카테고리의 다른 글
$resource, get과 query의 차이점은 무엇입니까? (0) | 2023.03.18 |
---|---|
순환 개체 값을 포함하는 개체를 직렬화하는 중 (0) | 2023.03.18 |
Wordpress에서 현재 게시 ID를 사용하여 다음/이전 게시 ID 가져오기 (0) | 2023.03.18 |
HTML을 JSON에 매핑 (0) | 2023.03.18 |
spring-boot-configuration-processor란 무엇입니까?왜 사람들은 도서관에서 도서관을 제외할까?의존관계 트리에서는 왜 보이지 않는가? (0) | 2023.03.18 |