1

これが私の機能です

    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の値をフェッチする必要があります。どうすればそれを取得できますか。私はOOPの概念に慣れていないので、教えてください。

これまでのところ、私はこの関数を次のように使用しています

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

1 に答える 1

2

関数は$toCheck 参照&)によって変数を受け取ります。したがって、渡された変数の値は、呼び出された後に変更されています。変数を渡している$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つの異なる変数のままです。

于 2012-11-23T19:21:42.970 に答える