gpt4 book ai didi

php - 类方法签名不匹配?

转载 作者:行者123 更新时间:2023-12-01 22:32:16 28 4
gpt4 key购买 nike

我编写了一些代码来使用 PHP 库(对于名为 Checkfront 的产品,但这并不重要)。该库定义了一个具有抽象方法的类:

abstract protected function store($data);

在我的代码中,我将其子类化为

final protected function store($data=array()) {

在我的独立版本的代码中,使用一些示例代码的实现可以很好地工作:

/* DUMMY Data store.  This sample stores oauth tokens in a text file...
* This is NOT reccomened in production. Ideally, this would be in an encryped
* database or other secure source. Never expose the client_secret or access / refresh
* tokens.
*
* store() is called from the parent::CheckfrontAPI when fetching or setting access tokens.
*
* When an array is passed, the store should save and return the access tokens.
* When no array is passed, it should fetch and return the stored access tokens.
*
* param array $data ( access_token, refresh_token, expire_token )
* return array
*/
final protected function store($data=array()) {
$tmp_file = sys_get_temp_dir() . DIRECTORY_SEPARATOR. $this->tmp_file;
if(count($data) ) {
file_put_contents($tmp_file,json_encode($data,true));
} elseif(is_file($tmp_file)) {
$data = json_decode(trim(file_get_contents($tmp_file)),true);
}
return $data;
}

。但是当我尝试在 WordPress 插件中使用它时,我遇到了错误。这是 WordPress 中的功能:

final protected function store($data=array()) {
global $wpdb;
if (count($data)) {
$query = "
INSERT INTO {$wpdb->prefix}pt_store (k, v)
VALUES (%s, %s)
ON DUPLICATE KEY UPDATE v=values(v)";
foreach ($data as $k => $v) {
$wpdb->query($wpdb->prepare($query, $k, $v));
}
} else {
$data = $wpdb->get_results("
SELECT (k, v)
FROM {$wpdb->prefix}pt_store", ARRAY_A);
}
return $data;
}

但是当我尝试激活该插件时,它给了我错误:

Fatal error: Declaration of Checkfront::store() must be compatible with that of CheckfrontAPI::store() in /hsphere/local/home/[blah]/[blah].ixtrial.com/wordpress/wp-content/plugins/pt-checkfront/pt-checkfront.php on line 15

这些声明对我来说看起来是一样的,那么有什么问题吗? (请记住,这是我第一次编写 PHP,所以不要忽视我在这里很愚蠢的可能性。)

最佳答案

在 PHP 5.2 及更早版本中,可选参数将导致签名被视为不同。您无法真正以一种很好的方式解决这个问题,因此请尝试升级 PHP。

'当然,您可能不需要默认值。既然如此,那就拿出来吧!您还可以传递 null 并执行以下操作:

final protected function store($data) {
if ($data === null) $data = array();

关于php - 类方法签名不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20733368/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com