属性 OOP 的错误值
Wrong values for properties OOP
我无法从以下 OOP 设置的属性中获取正确的值 class
class person {
private $defaults = [
'post_types' => [],
'number' => 1,
'use_referrers' => true,
'in_same_term' => false,
'include' => [],
'exclude' => [],
'taxonomy' => 'category',
'include_children' => true,
'previous' => true,
'boundary_posts' => false,
'anchor_text' => '%anchor',
'post_link_text' => '%text',
'separator' => '</br>',
'span_separator' => '</br>',
'span_text_prev' => 'Older post: ',
'span_text_next' => 'Newer post: ',
'span_text_oldest' => 'Oldest post: ',
'span_text_newest' => 'Newest post: ',
];
public $post;
public $is_referred_post = false;
public $is_author_referrer = false;
public $is_search_referrer = false;
public $is_tax_referrer = false;
public function post( $post ) {
$this->post = get_queried_object();
return $this->post;
}
public function referrers_defaults() {
//Set is_author_referrer if query_var aq is set
if( isset( $_GET['aq'] ) ) {
$this->is_author_referrer = true;
}
//Set is_search_referrer if query_var sq is set
if( isset( $_GET['sq'] ) ) {
$this->is_search_referrer = true;
}
//Set is_tax_referrer if query_var tq is set
if( isset( $_GET['tq'] ) ) {
$this->is_tax_referrer = true;
}
//Set is_referred_post if the current single post has one of the query_vars in the URL
if( $this->is_author_referrer || $this->is_search_referrer || $this->is_tax_referrer ) {
$this->is_referred_post = true;
}
return $this;
}
}
$a = new person();
?><pre><?php var_dump($a); ?></pre><?php
这是我从 var_dump( $a );
中得到的
object(person)#569 (6) {
["defaults":"person":private]=>
array(18) {
["post_types"]=>
array(0) {
}
["number"]=>
int(1)
["use_referrers"]=>
bool(true)
["in_same_term"]=>
bool(false)
["include"]=>
array(0) {
}
["exclude"]=>
array(0) {
}
["taxonomy"]=>
string(8) "category"
["include_children"]=>
bool(true)
["previous"]=>
bool(true)
["boundary_posts"]=>
bool(false)
["anchor_text"]=>
string(7) "%anchor"
["post_link_text"]=>
string(5) "%text"
["separator"]=>
string(5) "
"
["span_separator"]=>
string(5) "
"
["span_text_prev"]=>
string(12) "Older post: "
["span_text_next"]=>
string(12) "Newer post: "
["span_text_oldest"]=>
string(13) "Oldest post: "
["span_text_newest"]=>
string(13) "Newest post: "
}
["post"]=>
NULL
["is_referred_post"]=>
bool(false)
["is_author_referrer"]=>
bool(false)
["is_search_referrer"]=>
bool(false)
["is_tax_referrer"]=>
bool(false)
}
我的问题是这一段
["post"]=>
NULL
["is_referred_post"]=>
bool(false)
["is_author_referrer"]=>
bool(false)
["is_search_referrer"]=>
bool(false)
["is_tax_referrer"]=>
bool(false)
['post']
不应该是 NULL
,它应该给出当前 post 的值。如果我这样做 var_dump($a->post());
我会得到 post 对象。
此外,假设在URL ?aq=2
、["is_author_referrer"]
和["is_referred_post"]
中设置了以下变量,应该return true
,但是他们 return false
你可以从 var_dump()
.
中看到
为什么没有为这些属性设置正确的值。我在 OOP 中缺少什么
$a->post()
调用 post
方法 ,这不是 属性。当您调用此方法时,该方法将从某处获取一个值 (get_queried_object
)。这个值是返回的,也是存储在post
中的属性。我认为这就是为什么您认为应该填写 属性 的原因。但是在您调用该方法之前,属性 将保持为空。
我不知道最好的解决方案,因为我不知道你的应用程序的其余部分(比如,这个 post 对象是如何构造的,什么是 get_queried_object
以及从什么时候开始是否可用,等等)。不过,我希望我为您指出了问题所在,这将帮助您找到正确的解决方案。
一个可能的想法是从构造函数中设置 $post
,但正如我所说,这是否有效取决于其他因素:
public function __construct() {
$this->post = get_queried_object();
}
创建新对象时调用构造函数__construct
。
我对构造函数有误解,感谢@GolezTrol,我让事情正常工作
这是现阶段的最终工作版本
class person {
private $defaults = [
'post_types' => [],
'number' => 1,
'use_referrers' => true,
'in_same_term' => false,
'include' => [],
'exclude' => [],
'taxonomy' => 'category',
'include_children' => true,
'previous' => true,
'boundary_posts' => false,
'anchor_text' => '%anchor',
'post_link_text' => '%text',
'separator' => '</br>',
'span_separator' => '</br>',
'span_text_prev' => 'Older post: ',
'span_text_next' => 'Newer post: ',
'span_text_oldest' => 'Oldest post: ',
'span_text_newest' => 'Newest post: ',
];
public $current_post;
public $is_referred_post = false;
public $is_author_referrer = false;
public $is_search_referrer = false;
public $is_tax_referrer = false;
public function __construct() {
$this->init();
}
public function init() {
$this->getCurrentpost();
$this->referrers();
}
public function getCurrentpost() {
return $this->current_post = get_queried_object();
}
public function referrers() {
//Set is_author_referrer if query_var aq is set
if( isset( $_GET['aq'] ) ) {
$this->is_author_referrer = true;
}
//Set is_search_referrer if query_var sq is set
if( isset( $_GET['sq'] ) ) {
$this->is_search_referrer = true;
}
//Set is_tax_referrer if query_var tq is set
if( isset( $_GET['tq'] ) ) {
$this->is_tax_referrer = true;
}
//Set is_referred_post if the current single post has one of the query_vars in the URL
if( $this->is_author_referrer || $this->is_search_referrer || $this->is_tax_referrer ) {
$this->is_referred_post = true;
}
}
}
$a = new person();
我无法从以下 OOP 设置的属性中获取正确的值 class
class person {
private $defaults = [
'post_types' => [],
'number' => 1,
'use_referrers' => true,
'in_same_term' => false,
'include' => [],
'exclude' => [],
'taxonomy' => 'category',
'include_children' => true,
'previous' => true,
'boundary_posts' => false,
'anchor_text' => '%anchor',
'post_link_text' => '%text',
'separator' => '</br>',
'span_separator' => '</br>',
'span_text_prev' => 'Older post: ',
'span_text_next' => 'Newer post: ',
'span_text_oldest' => 'Oldest post: ',
'span_text_newest' => 'Newest post: ',
];
public $post;
public $is_referred_post = false;
public $is_author_referrer = false;
public $is_search_referrer = false;
public $is_tax_referrer = false;
public function post( $post ) {
$this->post = get_queried_object();
return $this->post;
}
public function referrers_defaults() {
//Set is_author_referrer if query_var aq is set
if( isset( $_GET['aq'] ) ) {
$this->is_author_referrer = true;
}
//Set is_search_referrer if query_var sq is set
if( isset( $_GET['sq'] ) ) {
$this->is_search_referrer = true;
}
//Set is_tax_referrer if query_var tq is set
if( isset( $_GET['tq'] ) ) {
$this->is_tax_referrer = true;
}
//Set is_referred_post if the current single post has one of the query_vars in the URL
if( $this->is_author_referrer || $this->is_search_referrer || $this->is_tax_referrer ) {
$this->is_referred_post = true;
}
return $this;
}
}
$a = new person();
?><pre><?php var_dump($a); ?></pre><?php
这是我从 var_dump( $a );
object(person)#569 (6) {
["defaults":"person":private]=>
array(18) {
["post_types"]=>
array(0) {
}
["number"]=>
int(1)
["use_referrers"]=>
bool(true)
["in_same_term"]=>
bool(false)
["include"]=>
array(0) {
}
["exclude"]=>
array(0) {
}
["taxonomy"]=>
string(8) "category"
["include_children"]=>
bool(true)
["previous"]=>
bool(true)
["boundary_posts"]=>
bool(false)
["anchor_text"]=>
string(7) "%anchor"
["post_link_text"]=>
string(5) "%text"
["separator"]=>
string(5) "
"
["span_separator"]=>
string(5) "
"
["span_text_prev"]=>
string(12) "Older post: "
["span_text_next"]=>
string(12) "Newer post: "
["span_text_oldest"]=>
string(13) "Oldest post: "
["span_text_newest"]=>
string(13) "Newest post: "
}
["post"]=>
NULL
["is_referred_post"]=>
bool(false)
["is_author_referrer"]=>
bool(false)
["is_search_referrer"]=>
bool(false)
["is_tax_referrer"]=>
bool(false)
}
我的问题是这一段
["post"]=>
NULL
["is_referred_post"]=>
bool(false)
["is_author_referrer"]=>
bool(false)
["is_search_referrer"]=>
bool(false)
["is_tax_referrer"]=>
bool(false)
['post']
不应该是 NULL
,它应该给出当前 post 的值。如果我这样做 var_dump($a->post());
我会得到 post 对象。
此外,假设在URL ?aq=2
、["is_author_referrer"]
和["is_referred_post"]
中设置了以下变量,应该return true
,但是他们 return false
你可以从 var_dump()
.
为什么没有为这些属性设置正确的值。我在 OOP 中缺少什么
$a->post()
调用 post
方法 ,这不是 属性。当您调用此方法时,该方法将从某处获取一个值 (get_queried_object
)。这个值是返回的,也是存储在post
中的属性。我认为这就是为什么您认为应该填写 属性 的原因。但是在您调用该方法之前,属性 将保持为空。
我不知道最好的解决方案,因为我不知道你的应用程序的其余部分(比如,这个 post 对象是如何构造的,什么是 get_queried_object
以及从什么时候开始是否可用,等等)。不过,我希望我为您指出了问题所在,这将帮助您找到正确的解决方案。
一个可能的想法是从构造函数中设置 $post
,但正如我所说,这是否有效取决于其他因素:
public function __construct() {
$this->post = get_queried_object();
}
创建新对象时调用构造函数__construct
。
我对构造函数有误解,感谢@GolezTrol,我让事情正常工作
这是现阶段的最终工作版本
class person {
private $defaults = [
'post_types' => [],
'number' => 1,
'use_referrers' => true,
'in_same_term' => false,
'include' => [],
'exclude' => [],
'taxonomy' => 'category',
'include_children' => true,
'previous' => true,
'boundary_posts' => false,
'anchor_text' => '%anchor',
'post_link_text' => '%text',
'separator' => '</br>',
'span_separator' => '</br>',
'span_text_prev' => 'Older post: ',
'span_text_next' => 'Newer post: ',
'span_text_oldest' => 'Oldest post: ',
'span_text_newest' => 'Newest post: ',
];
public $current_post;
public $is_referred_post = false;
public $is_author_referrer = false;
public $is_search_referrer = false;
public $is_tax_referrer = false;
public function __construct() {
$this->init();
}
public function init() {
$this->getCurrentpost();
$this->referrers();
}
public function getCurrentpost() {
return $this->current_post = get_queried_object();
}
public function referrers() {
//Set is_author_referrer if query_var aq is set
if( isset( $_GET['aq'] ) ) {
$this->is_author_referrer = true;
}
//Set is_search_referrer if query_var sq is set
if( isset( $_GET['sq'] ) ) {
$this->is_search_referrer = true;
}
//Set is_tax_referrer if query_var tq is set
if( isset( $_GET['tq'] ) ) {
$this->is_tax_referrer = true;
}
//Set is_referred_post if the current single post has one of the query_vars in the URL
if( $this->is_author_referrer || $this->is_search_referrer || $this->is_tax_referrer ) {
$this->is_referred_post = true;
}
}
}
$a = new person();