Php 无法重新声明函数正在执行while循环

Php 无法重新声明函数正在执行while循环,php,function,Php,Function,我不熟悉函数,我可能做得不太好,所以我需要一些帮助。我正在从网站API中提取股票信息。所有被提取的信息都是通过几个.php页面完成的,我有一个包含所有必要页面的文件。所以我有这样的想法: pullBalanceSheet.php获取所有资产负债表数据 pullIncomeStatement.php获取所有收入表数据 等等,共有10页。所有页面都可以彼此独立运行,并且这样创建是为了便于测试每个API调用。 我有一个母版页(pullData.php),其中包含每个页面所需的include,因此它可以

我不熟悉函数,我可能做得不太好,所以我需要一些帮助。我正在从网站API中提取股票信息。所有被提取的信息都是通过几个.php页面完成的,我有一个包含所有必要页面的文件。所以我有这样的想法: pullBalanceSheet.php获取所有资产负债表数据 pullIncomeStatement.php获取所有收入表数据 等等,共有10页。所有页面都可以彼此独立运行,并且这样创建是为了便于测试每个API调用。 我有一个母版页(pullData.php),其中包含每个页面所需的include,因此它可以有效地将所有页面作为单个页面运行。我希望这是有道理的

我的一些页面包含一个函数,这可能不是我最好的方法,但是页面可以提取正确的数据。这些页面收集过去5年的季度财务信息。问题是每家公司对季度财务日期的表述都不同。因此,假设现在是2019年1月,一些公司季度将公布2019年第二季度,尽管2019年3月之前实际上不是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);
…等了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
    }

我想是吧!函数_exists不正确,或者我的函数编码方式存在其他一些关键问题。我希望这一切都有意义。如果您需要任何其他代码,请告诉我。提前谢谢

首先,在
while
循环的每次迭代中,不应包含pullBalanceSheet.php和pullIncomeStatement.php文件。在
循环时,在
外取下面两行

include('pullBalanceSheet.php'); 
include('pullIncomeStatement.php');
现在问题来了,你不能一次又一次地声明你的函数,只要声明一次,然后根据你的需要多次调用它(使用合适的参数)。话虽如此,您可以与函数一起使用来解决函数的重新扩展问题

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

    }
?>


这样,您将防止自己(和其他人)多次包含此文件代码。

将所有函数定义放在一个单独的文件中,并在循环之前使用
require\u once'/path/to/file.php
调用它。无需每次迭代都重新声明函数。像@Qirel建议的那样,或者只是将
函数
放在循环的上方或下方。通常,PHP中的函数声明一次,可以经常使用。