我是函数的新手,我可能做得不太好,可以为此提供一些帮助。我正在从网站API获取股票信息。所有要提取的信息都是通过几个.php页面完成的,我有一个包含所有必需页面的文件。所以我有这样的事情: pullBalanceSheet.php用于所有资产负债表数据 pullIncomeStatement.php用于所有收入表数据 等等,共有10页。所有页面都可以彼此独立运行,并且这样创建即可轻松测试每个API调用。 我有一个母版页(pullData.php),其中包含每个页面的必要包含,因此它可以有效地将所有页面作为一个页面运行。我希望这是有道理的。
我的某些页面包含一个函数,这可能不是我最好的方法,但是页面可以提取正确的数据。这些页面列出了过去5年的季度财务信息。问题在于,每个公司对季度财务日期的陈述都不同。因此,假设是2019年1月,即使到2019年3月才真正是2019年第二季度,某些公司的季度报告仍将公布2019年第二季度。因此我的代码基本上需要捕获将来的日期,所以我的代码如下所示:>
$fiscal_year = date("Y");
$fiscalPeriod = 'Q1';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
$fiscalPeriod = 'Q2';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
$fiscalPeriod = 'Q3';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
$fiscalPeriod = 'Q4';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
//year 2
$fiscal_year = $fiscal_year-1;
$fiscalPeriod = 'Q1';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
$fiscalPeriod = 'Q2';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
$fiscalPeriod = 'Q3';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
$fiscalPeriod = 'Q4';
pulldataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey);
.. etc 5年。该API会查看$ fiscal_year和$ fiscal_period并返回数据(如果有)。
功能是这样的:
function pullDataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey) {
// function code here
}
提取一只股票时,我所有的代码都有效。我现在正在通过在pullData.php主页上使用while循环来拉动多只股票,而这就是我遇到的问题。由于代码会为每只新股票重复,因此出现了致命错误,无法重新声明函数。我知道为什么会发生这种情况,因为循环被视为单页处理,当它碰到第二张纸时就会出错。我正在尝试找出解决方法。我用过
if(!function_exists('pullDataBS')) {
function pullDataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey) {
//function code here
}
}
我第一次遇到函数调用时遇到了一个未定义的函数pulldataBS错误(在此示例中,代码的第三行尝试了第一个pulldataBS)。这是我的pulldata.php主页:
while($research = mysqli_fetch_array($queryResearch)) {
$_SESSION['ticker'] = $research['symbol'];
include('pullBalanceSheet.php');
include('pullIncomeStatement.php');
// etc
}
我假设!function_exists不正确,或者我对函数的编码方式存在其他严重问题。我希望这一切都有意义。让我知道是否需要其他代码。在此先感谢!
答案 0 :(得分:0)
首先,您不应在while
循环的每次迭代中包含 pullBalanceSheet.php 和 pullIncomeStatement.php 文件。在while
循环之外的下面两行。
include('pullBalanceSheet.php');
include('pullIncomeStatement.php');
现在出现了问题,您不必一遍又一遍地声明您的函数,只需声明一次并根据需要多次调用它(使用适当的参数)即可。话虽如此,您可以将defined()
与define()
函数一起使用来解决函数重新发布问题。
if(!defined('PULL_DATA_BS')){
define('PULL_DATA_BS', 'pullDataBS');
function pullDataBS($fiscal_year,$fiscalPeriod, $username,$password,$apiKey) {
//function code here
}
}
这样,此函数不会被多次声明。理想情况下,应该使用下面的代码块封装文件的整个代码。
xyz.php
<?php
if(!defined('XYZ_PHP')){
define('XYZ_PHP', 'xyz.php');
// file code
}
?>
这样,您将防止自己(和其他人)多次包含此文件代码。