آموزش php مقدماتی قسمت هشتم

مقادیر بازگشتی از فانکشن Return:

همان طور که در مثال قبل دیدی فانکشن ما می تونه مقداری را چاپ کنه حالا اگر بخوام مقداری را برگردونه باید چه کاری انجام بدم ؟ از کلمه کلیدی return استفاده می کنیم ، و اگر بیش از یک داده را بخواهیم برگردانیم آنها را داخل یک آرایه قرار می دهیم سپس return می کنیم ، برای خواندم آن آرایه نیز می توانیم از list استفاده کنیم ویا به همان شکل قبل با آرایه کار کنیم .

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Functions Return Values</title>
</head>
<body>

<?php

function add($val1, $val2)
{
$sum = $val1 + $val2;
return $sum;
}

$result = add(3, 4);
echo $result . '<br>';
$result1 = add(3, $result);
echo $result1 . '<br>';
function addSubt($val1, $val2)
{
$add = $val1 + $val2;
$subt = $val1 - $val2;
return array($add , $subt);
}

$resultArray = addSubt(10,5);
echo 'Add: '.$resultArray[0].'<br>';
echo 'Subt: '.$resultArray[1].'<br>';

list($addResult,$subResult) = addSubt(20,6);
echo 'Add: '.$addResult.'<br>';
echo 'Subt: '.$subResult.'<br>';

?>
</body>
</html>

متغییرهای محلی و سراسری Global and Local Scope :

متغییرهایی که در داخل فانکشن نوشته می شوند را متغییر محلی و متغییرهایی که خارج از آن هستند را سراسری گویند .

<?php

$anar = 'outSide';

function sabad()
{
$anar = 'inside';
}

echo '1' . $anar . '<br>';
sabad();
echo '2' . $anar . '<br>';

?>

اگر مثال بالا را اجرا کنید می بینید که فقط outside چاپ میشود و به متغییر محلی که داخل فانکشن است دست رسی نداریم هم چنین با فرا خوانی فانکشن مقدار متغییر سراسری نیز تغییر نمی کند .
برای دسترسی می توانیم داخل فانکشن عبارت global $anar را چاپ کنید در این صورت بعد از اجرای کد می بینید که بعد از فراخوانی فانکشن مقدار ۲ به inside تغییر پیدا می کند .
تا اینجا یاد گرفتیم چگونه فانکشن ایجاد کنیم به آن مقدار ورودی بدهیم از آن خروجی بگیریم و آن را صدا کنیم ، حال فرض کنید فانکشن ما نیاز به ورودی داشته باشد اما کاربر فراموش کند در زمان فراخوانی فانکشن به آن ورودی دهد در این صورت با خطا مواجه خواهیم شد برای رفع این مشکل به پارامترهای ورودی مقدار پیشفرض می دهیم به مثال زیر توجه کنید :

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Functions Default</title>
</head>
<body>

<?php

function paint($room = 'office' ,$color = 'red')
{
return "range {$room} {$color} ast </br>";
}

echo paint();
echo paint('busStop' ,'blue');
echo paint('fastFood',null);
echo pain('pool');

?>

</body>
</html>

در کد بالا اگر فانکش paint بدون ورودی فراخوانی شود مانند echo اول ، مقادیر office برای room و مقدار red برای color انتخاب می شود.

ساختن یک صفحه وب :

برای این که اطلاعات یا درخواست از کاربر بگیریم ۳ روش وجود دارد استفاده از URLs/Links (GET) استفاده از Forms(POST) استفاده از Cookies
من دو فایل php می سازم یکی به نام firstPage و درگری به نام secondPage ، حالا می خواهم از صفحه اول به صفحه دوم برم برای این کار ار تگ a مربوط به html استفاده می کنم و آدرس صفحه ای را که می خواهم در href می گذارم ، وقتی برروی لینک ایجاد شده کلیک کنید به صفحه دوم میرید ، اگر بخوام پارامتری به صفحه دوم بفرستم می تونم از با استفاده از کویری استرینگ ، کویری پارامتر ارسال کنیم . استفاده کنم بعد از آدرس صفحه مورد نظر علامت سوال قرار می دهم و نام پاراکتر علامت مساوی و سپس مقداری که می خواهم انتقال پیدا کند را می نویسم ، در مثال وقتی روی لینک ایجاد شده کلیک کنید ، به صفحه دوم میروید اگر به URL دقت کنید می بینید که http://localhost/codes/secondPage.php?id=2
چاپ شده است .

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>First</title>
</head>
<body>
<?php $linkName = 'Second Page'?>
<?php $id=2;?>
<a href="secondPage.php?id=<?php echo $id;?>"><?php echo $linkName;?></a>

</body>
</html>

حالا باید این داده را در صفحه دوم بگیریم برای این کار از سوپرگلوبالی به نام $_GET استفاده می کنیم ، به صفحه دوم بروید و متغیری به نام id یا هر نام دیگری ایجاد کنید ، سپس با استفاده از $_GET مقدار id را درون آن بریزید و چاپ کنید ، برای آن که ببینید در $_GET چه چیزهایی وجود دارد می توانید آن را print_r کنید.

<pre>
<?php
print_r($_GET);
?>
</pre>

<?php

echo 'My Id is: '.$id = $_GET['id'];;

?>

در هنگام استفاده از URL ممکنه مشکلاتی برای ما پیش بیاد بعضی از کلمات برای url معنی خواصی دارند مثلا & اگر بخواهیم دو پارامتر را در url ارسال کنیم از این علامت استفاده می کنیم

<?php $linkName = 'Second Page'?>
<?php $id=2;?>
<?php $company='darkoob & web';?>
<a href="secondPage.php?id=<?php echo $id;?>&company=<?php echo $company;?>"><?php echo $linkName;?></a>

همان طور که می بینید در صفحه اول من پارامتر company را در url ارسال کردم که داخل آن darkoob & we وجود دارد اما وقتی در صفحه دوم این پارامتر را می گیرم فقط darkoob برای من چاپ می شود چرا چون علامت & برای تعریف یک پاراکتر دیگر در url استفاده می شود در اینجا web به عنوان یک پارامتر دیگر در نظر گرفته شده برای رفع این مشکل از urlencode استفاده می کنم .

<?php $linkName = 'Second Page'?>
<?php $id=2;?>
<?php $company='darkoob & web';?>
<a href="secondPage.php?id=<?php echo $id;?>&company=<?php echo urlencode($company);?>"><?php echo $linkName;?></a>

ممکن است بخواهیم آدرسی را نیز در url بفرستیم نه فقط یک پارامتررا برای این کار از rawurlencode استفاده می کنیم urlencode برای کویری استرینگ ها و rawurlencode برای مسیرهاست به مثال زیر دقت کنید .

<?php $linkName = 'Second Page';

$page = 'Molana Jalalodin Balkhi';
$quote = 'besh no az ney chon he ka yat mikonad';
$link1 = '/bio/'.rawurlencode($page).'?quote='.urlencode($quote);
$link2 = '/bio/'.urlencode($page).'?quote='.rawurlencode($quote);

echo $link1.'<br>';
echo $link2.'<br>';

?>

اگر کدبالا را اجرا کنیم خروجی زیر را خواهید دید .

phptutotial14

در لینک اول سیستم به دنبال bio/Molana فاصله jalalodin … می گردد اما در لینک دوم سیستم به دنبال /bio/Molana+Jalalodin+Balkhi می گردد اما ما چیزی به اسم Molana+Jalalodin+Balkhi نداریم ، این تفاوت استفاده از rawurlencodeو urlencode است.
فقط url نیست که کاراکترهای رزرو شده دارد بلکه html نیز همین گونه است فرض کنید می خواهم لینکی بسارم و در آن بنویسم<Click>&lean more در این صورت html این عبارت را به عنوان یک تگ می شناسد و <Click> من نمایش داده نمی شود.

<a href="">
<Click> & Learn more
</a>

برای رفع این مشکل از htmlspecialchars استفاده میکنم.
<a href="">
<?php echo htmlspecialchars('<Click> & Learn more'); ?>
</a>

phptutotial15
بعد از استفاده از htmlspecialchars
phptutotial16

درباره نویسنده

پوریا

سلام ، من پوریا هستم با جاوا آشنایی دارم به هوش مصنوعی و امنیت علاقه مندم و امید وارم آموزش هایی که در وب سایت قرار می دم برای شما مفید باشه ، موفق باشید {^}

نظر دهید

Click here to post a comment

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *