Here is my function
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;
}
Notice the &$toCheck in the function argument. Now at the end of the function code at this line (see code below) function returns the updated postcode and true value in case of all conditions being met.
if ($valid)
{
$toCheck = $postcode;
return true;
}
My question is how can I get the value of the returned $toCheck variable outside the function. In simple words I need to fetch the value of $toCheck being return by the function isValidPostCode(). How can I get that. Please let me know as I am newbie with OOPs concepts.
So far i am using this function as
if (!isValidPostCode($postcode))
{
header("location:mechanics_edit.php?id=$id&case=edit&type=warning&msg=" .urlencode("Invalid Post Code"));
exit();
}
Your function receives the variable
$toCheckby reference (&). Therefore, the value of the variable you passed to it has been modified after it is called. You are passing in the variable$postcode, so just accessing$postcodeafter the function will contain the modified value.Note that this variable
$postcodeis not the same$postcodethat you constructed inside the function. That one was scoped locally to the function, and although you assigned the function$postcode‘s value to the reference variable$toCheck(which was the outer scope$postcodeabove), they remain 2 distinct variables in different scopes.