这是我的功能
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();
}
答案 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个不同的不同范围内的变量。