我在该平台上的多个用户的帮助下,在一个类中编写了以下函数代码。效果很好。但是,我遇到了一个似乎无法解决的问题。
我想使用一个函数中的变量,然后将其用于另一个函数中。
这是我的代码:
<?php
include("/usr/local/cpanel/php/cpanel.php"); // Instantiate the CPANEL object.
$cpanel = new CPANEL(); // Connect to cPanel - only do this once.
class CpanelAPI {
public function get_db_restrictions($cpanel) {
$cp_db_restrictions = $cpanel->uapi(
'Mysql', 'get_restrictions'
);
$array = $cp_db_restrictions['cpanelresult']['result']['data'];
$this->db_prefix = $array['prefix'] ?? 'No prefix';
$this->max_database_name_length = $array['max_database_name_length'] ?? '12';
$this->db_max_username_length = $array['max_username_length'] ?? '12';
}
public function get_domain_info($cpanel) {
$cp_domaininfo = $cpanel->uapi(
'DomainInfo', 'domains_data',
array(
'format' => 'hash',
'return_https_redirect_status' => '1',
)
);
$array = $cp_domaininfo['cpanelresult']['result']['data'];
$this->main_domain = $array['main_domain']['domain'] ?? 'No main domain';
$this->main_documentroot = $array['main_domain']['documentroot'] ?? '/home/';
$this->addon_domains = $array['addon_domains'] ?? 'No addon domains';
$this->sub_domains = $array['sub_domains'] ?? 'No subdomains';
}
public function get_mysql_db($cpanel) {
$cp_list_databases = $cpanel->uapi(
'Mysql', 'list_databases'
);
$array = $cp_list_databases['cpanelresult']['result']['data'];
$this->next_db_name = max(array_map(function ($v) use ($this->db_prefix) { <!--HERE
return (int)str_replace("{$this->db_prefix}wp", '', $v); <!--HERE
},
array_column($array, 'database'))) + 1;
}
}
$cpanelapi = new CpanelAPI;
$cpanelapi->get_db_restrictions($cpanel);
$cpanelapi->get_domain_info($cpanel);
$cpanelapi->get_mysql_db($cpanel);
?>
<pre>
<?php echo $cpanelapi->db_prefix; ?>
<?php echo $cpanelapi->max_database_name_length; ?>
<?php echo $cpanelapi->db_max_username_length; ?>
<?php echo $cpanelapi->main_domain; ?>
<?php echo $cpanelapi->addon_domains; ?>
<?php echo $cpanelapi->next_db_name; ?>
</pre>
您会注意到,我指示的按钮与<!--HERE
不兼容。
我正在尝试使用$this->db_prefix
从第一个函数获取数据库表前缀。
但这不起作用。
我尝试使用self
和范围解析运算符::
,但没有用,或者我做错了。
有什么想法吗?
编辑和解决方案:
因此,我使用此解决方案https://stackoverflow.com/a/44482181/1747477
找出了答案导致的结果
public function get_mysql_db($cpanel) {
$cp_list_databases = $cpanel->uapi(
'Mysql', 'list_databases'
);
$array = $cp_list_databases['cpanelresult']['result']['data'];
$prefix = $this->db_prefix;
$this->next_db_name = max(array_map(function ($v) use ($prefix) {
return (int)str_replace("{$prefix}wp", '', $v);
},
array_column($array, 'database'))) + 1;
}