需要知道如何获取返回变量的值

时间:2012-11-23 19:17:22

标签: php

这是我的功能

    public function isValidPostCode(&$toCheck)
    {
      // Permitted letters depend upon their position in the postcode.
      $alpha1 = "[abcdefghijklmnoprstuwyz]";                          // Character 1
      $alpha2 = "[abcdefghklmnopqrstuvwxy]";                          // Character 2
      $alpha3 = "[abcdefghjkpmnrstuvwxy]";                            // Character 3
      $alpha4 = "[abehmnprvwxy]";                                     // Character 4
      $alpha5 = "[abdefghjlnpqrstuwxyz]";                             // Character 5
      $BFPOa5 = "[abdefghjlnpqrst]{1}";                               // BFPO character 5
      $BFPOa6 = "[abdefghjlnpqrstuwzyz]{1}";                          // BFPO character 6

      // Expression for BF1 type postcodes
      $pcexp[0] =  '/^(bf1)([[:space:]]{0,})([0-9]{1}' . $BFPOa5 . $BFPOa6 .')$/';

      // Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA with a space
      $pcexp[1] = '/^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([[:space:]]{0,})([0-9]{1}'.$alpha5.'{2})$/';

      // Expression for postcodes: ANA NAA
      $pcexp[2] =  '/^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([[:space:]]{0,})([0-9]{1}'.$alpha5.'{2})$/';

      // Expression for postcodes: AANA NAA
      $pcexp[3] =  '/^('.$alpha1.'{1}'.$alpha2.'{1}[0-9]{1}'.$alpha4.')([[:space:]]{0,})([0-9]{1}'.$alpha5.'{2})$/';

      // Exception for the special postcode GIR 0AA
      $pcexp[4] =  '/^(gir)([[:space:]]{0,})(0aa)$/';

      // Standard BFPO numbers
      $pcexp[5] = '/^(bfpo)([[:space:]]{0,})([0-9]{1,4})$/';

      // c/o BFPO numbers
      $pcexp[6] = '/^(bfpo)([[:space:]]{0,})(c\/o([[:space:]]{0,})[0-9]{1,3})$/';

      // Overseas Territories
      $pcexp[7] = '/^([a-z]{4})([[:space:]]{0,})(1zz)$/';

      // Anquilla
      $pcexp[8] = '/^ai-2640$/';

      // Load up the string to check, converting into lowercase
      $postcode = strtolower($toCheck);

      // Assume we are not going to find a valid postcode
      $valid = false;

      // Check the string against the six types of postcodes
      foreach ($pcexp as $regexp) {

        if (preg_match($regexp,$postcode, $matches)) {

          // Load new postcode back into the form element
              $postcode = strtoupper ($matches[1] . ' ' . $matches [3]);

          // Take account of the special BFPO c/o format
          $postcode = preg_replace ('/C\/O([[:space:]]{0,})/', 'c/o ', $postcode);

          // Take acount of special Anquilla postcode format (a pain, but that's the way it is)
          if (preg_match($pcexp[7],strtolower($toCheck), $matches)) $postcode = 'AI-2640';

          // Remember that we have found that the code is valid and break from loop
          $valid = true;
          break;
        }
      }

      // Return with the reformatted valid postcode in uppercase if the postcode was
      // valid
      if ($valid)
      {
          $toCheck = $postcode;
            return true;
      }
        else return false;
    }

注意函数参数中的& $ toCheck。现在在这一行的函数代码的末尾(参见下面的代码)函数返回更新的邮政编码和真值,以满足所有条件。

if ($valid)
      {
          $toCheck = $postcode;
            return true;
      }

我的问题是如何在函数外部获取返回的$ toCheck变量的值。简单来说,我需要通过函数isValidPostCode()获取$ toCheck的值。我怎么能得到它。请告诉我,因为我是OOPs概念的新手。

到目前为止,我正在使用此功能

if (!isValidPostCode($postcode))
{
    header("location:mechanics_edit.php?id=$id&case=edit&type=warning&msg=" .urlencode("Invalid Post Code"));
    exit();
}

1 个答案:

答案 0 :(得分:2)

您的函数收到变量$toCheck by reference&)。因此,传递给它的变量的值在调用后已被修改。您传入变量$postcode,因此只需在函数后访问$postcode即可包含修改后的值。

// $postcode is some value, passed by reference to isValidPostCode()
if (isValidPostCode($postcode))
{
    // It was valid on input, and now it contains a new value
    // since it was passed by reference and modified in the function
    // just before the function returned TRUE
    echo $postcode
    // outputs some new value...
}

请注意,此变量$postcode 与您在函数内构建的$postcode相同。那个是本地范围的函数,虽然你将函数$postcode的值赋给了引用变量$toCheck(上面是外部范围$postcode),但它们仍然是2个不同的不同范围内的变量。