دوره مجازی PHP (جلسه 5): ساختارهای شرطی در زبان PHP



visibility  
mode_comment   ۵۷

در این جلسه به معرفی و بررسی ساختارهای شرطی در زبان PHP خواهیم پرداخت و مثال های مختلفی را برای درک بهتر مفاهیم ارائه میدهیم . در انتها هم یک مینی پروژه (ماشین حساب با کدهای php) را با همدیگر خواهیم نوشت .

:: لیست مطالبی که در این جلسه گفته میشن به این شکل هست :

فصل 5 : ساختارهاي کنترلي : شرط ها و عبارت هاي منطقي

  • مقدمه و آشنايي با عبارت هاي شرطي در زبان هاي برنامه نويسي
  • بلاک بندي کد با استفاده از آکولادها
  • عبارت شرطي if
  • عبارت هاي else و else if
  • عبارت شرطي switch
  • نقش دستور break در ساختار switch
  • عبارت و عملگر شرطي ?
  • ارائه ي مثال هاي مختلف براي درک عمقي از نحوه ي استفاده از شرط ها
  • ميني پروژه 1 : محدودي کردن نمايش محتوا بر اساس سن و جنسيت کاربر
  • مینی پروژه 2 : نوشتن یک ماشین حساب با دستورات شرطی مختلف در زبان PHP
  • تمرين
info توجه

این مطلب یک جلسه از اموزش php حرفه ای می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در اموزش php حرفه ای

comment دیدگاه کاربران
na3r replyپاسخ

خسته نباشین …!
به نظر من میشه اسم این سری آموزشی رو : “آموزش بالینی Php” هم گذاشت!
چون مرحله به مرحله حتی تا حل ارور های احتمالی و رفع باگ های کوچیک هم همراه زبان آموز (!) می مونه!
یه نکته ای رو دوست دارم بگم که به نظرم در اوج کم توجهی آموزگاران کدنویسی بسیار دارای اهمیته:
انتقالِ درک صحیح، و کانالیزه کردن سطح انتظارات کاربران از کامپیوتر و الگوریتم ماشین و تبدیل تفکر کیفی و غیر ریاضی کاربر تازه کار به تفکر ریاضی وار ، کمٌی و منطقی، که منجر به برخورد صحیح کدنویس با ارور ها و طرح و حل مسئله های توانمند تر رو میشه به همون اندازه دارای اهمیته که تئوری کدنویسی اهمیت داره!
اما متاسفانه به دلایل مختلف این مهم در آموزشها کمتر مورد توجه قرار می گیره که خوشبختانه در این سری آموزشی اصلا این طور نیست و اتفاقا نقطه ی قوت و وجه تمایزش هم همین هست!

لقمان آوند

ممنون آقا ناصر
خیلی خوب و پیچیده می نویسی ماشالله! ساده تر بگو متوجه شیم 😉
ایشالله در ادامه ی آموزش ها هم به همین طریق ویدیوها رو پر می کنیم.
ممنون از لطفتون

احسان عبدی replyپاسخ

سلام استاد اگه تا آخر ترم همینجوری عالی پیش برید 28 تا رقیب پیدا می کنید هاااااااا.از ما گفتن بود. 😀

لقمان آوند

سلام جناب عبدی
من وظیفه ام هست که هر چی می دونم رو به دوستان منتقل کنم .
هر چی دانشجوهای من بهتر یاد بگیرند و حرفه ای تر بشن ، من هم خوشحال ترم و ثواب بیشتری بردم !
قطعا همینطوری ادامه خواهم داد .

Mahmood Dabestani replyپاسخ

سلام.
خدا بهتون قوت بده آقای آوند
آموزشاتون واقعا عالی داره پیش میره
به قدری که دارم کم کم امیدوار میشم به اینکه در آینده می تونم یه اسکریپت دانلود به ازای پرداخت با قابلیت اتصال مستقیم به بانک برای سایتم بنویسم.
تو رو خدا نگید که این یه خیال خامه… 🙄

لقمان آوند

سلام اقا محمود
خوشحالم که راضی هستید .
مهم اینه که اصول برنامه نویسی PHP رو خوب یاد بگیرید و خوب هم تمرین کنید .
موردی که گفتید یه اسکریپت سادست و کدهای پرداخت آنلاین رو هم که بانک (و یا درگاه های واسط مثل پارس پال) به شما میدن . وقتی php بلد باشید اون موارد رو هم به خوبی می فهمید و می تونید استفاده کنید .

1234567890 replyپاسخ

سلام و ممنون از تدریس بسیارخوبتون …

در مورد مثالی که در مورد ماشین حساب زدید ، سوالی دارم و اینکه بجای refresh میخام یه دکمه تعریف کنم که با فشردن دکمه ، برنامه اجرا شه … برای دکمه چه مواردی رو تعریف کنم ؟ مثلا action رو چی بزارم ؟
من یه پروژه تعریف کردم برای خودم پرتاب تاس با آموزش های این درس، که مثلا اگه 2 عدد تاس عین هم بود یا جمعشون 6 بود برنده ای و دکمه ای میخام که تا 5 بار بتونه امتحان کنه . اما اگه بتونم بجای refresh از دکمه استفاده کنم خیلی بهتر میشه … میشه منو راهنمایی کنین؟
البته امیدوارم زیادی خارج از بحث نشده باشم … 🙂

لقمان آوند

سلام
برای این کار لازمه که در مورد آرایه ی $_GET توی PHP اطلاع داشته باشید .
این کد رو ببینید و در مورد متد get برای درخواست ها هم مطالعه کنید . یه پارامتر رو تو url پاس میدیم و چک می کنیم اگه ست شده بود کدمون اجرا بشه :

1234567890

با سپاس از راهنماییتون

danial asvadi replyپاسخ

سلام اقای آوند
یک سوال برای من پیش امد اگر در دستور سوییچ متغری که به دستور پاس داده میشه اگر مقدار متغیر 0 باشه اولین کیس اجرا میشه مثل کد زیر

ایا با دستور settypeمیشه تعین کرد که اگر متغیر به غیر از رشته ای بود دستور سوییچ اجرا نشه؟
و یک سوال دیگه اینکه تفاوت elseif v else ifدر جلسه بعد توضیح داده شده؟

لقمان آوند

سوییچ رو بزار تو یه شرط if و مقدار n رو در شرط if بررسی کن …
جواب تمرین ها رو هم سعی می کنم به عنوان فایل در پایان هر چند جلسه بزارم .
ممنون بابت یادآوری

danial asvadi

سلام ممنون بابت راهنماییتون
کد بالا رو اگر به صورت زیر بنویسم مشکلی ایجاد نمیکنه دیگه؟

لقمان آوند

نه مشکل خاصی ایجاد نمی کنه .
فقط باید بدونی که رشته ی خالی ، رشته ی ‘0’ ، خود صفر و false و آرایه ی خالی و … معادل هم هستند …

Ali replyپاسخ

سلام
خسته نباشید
یه مشکلی در برنامه PhpStormدارم ، با اینکه کدینگی که داخل آموزش توضیح دادید و منم بطور پیش فرض روی همون utf-8 قرار دادم ولی وقتی داخل کدها کاراکتر فارسی استفاده می کنم ، موقع خروجی درست نمایش نمیده و باید با استفاده از html کد utf-8 تعریف کنم.
باید چیکار کنم !؟

لقمان آوند

با نوتپد++ یه فایل ایجاد کنید و انکدینگش رو utf8 بزارید . توش فارسی بنویسید و خروجیشو ببینید .
آیا باز هم مشکل برقراره ؟

Ali

وقتی داخل نوتپد++ روی utf8 قرار میدم درست نمایش میده ولی وقتی روی UTF-8 without BOM تنظیم می کنم درست نیست.

لقمان آوند

خوب پس احتمالا توی phpStorm درست ست نمیشه یونیکد . مجددا چکش کن ببین تنظیمات رو درست گذاشتی ؟

Ali replyپاسخ

صدرصد ست نمیشه ولی تنظیمات درست است و چندبار هم چک کردم و دوباره تنظیم کردم ولی تغییری حاصل نشده !!!

لقمان آوند

فعلا با همون نوتپد++ فایلا رو بساز . اگه راه حلی پیدا کردم بهت میگم .
اگر خواستی آیدی تیم ویور بده بعدا خودم برات چک کنم .

Ali replyپاسخ

ولی وقتی کدینگ فایل را بصورت دستی (راست کلیک روی صفحه گزینه File Encoding ) تنظیم میکنم مشکل برطرف میشه ! که اصولا باید خود برنامه این کارو بطور اتوماتیک انجام بده چون ما از قبل روی uft8 تنظیم کردیم.

لقمان آوند

حالا فعلا همین کارو بکن …

neyvid replyپاسخ

سلام.من اینکدینگ را همون UTF8 قرار میدم اما بازم خرچنگ قورباغه نمایش میده!!! ذخیره هم کردم و مطمئنا اینکدینگم utf8 هست.ممنون کمکم کنید

لقمان آوند

اگر در مرورگر اینطور نشون میده از تگ متای زیر استفاده کنید :

aref taker replyپاسخ

سلام فرق این که از : به جای {} استفاده کنیم چیه؟ توی طراحی قالب ورد‍‍‍‍‍‍‍‍‍پرس هم از همچین چیزی استفاده میشد.

لقمان آوند

سلام
از لحاظ کاربرد فرقی ندارند . بیشتر مکانی که از ایندو استفاده میشه متفاوته .
در جاهایی که لابلای بلاک ها از کدهای html استفاده می کنید معمولا از : استفاده میشه و زمانی که کد خالص php داشته باشید بیشتر از {} .
بله، تو قالب های وردپرس هم بیشتر از : استفاده میشه . ولی خوب از {} هم همونجا میشه استفاده و جایگزین کرد .

منصور جواهر replyپاسخ

استاد فرق else if , elseif دراین دوتا کد درست نوشته شده ؟
آیا تو چاپ مقادیر روی صفحه تغییر ایجاد میکنه منظورم اینه ک یجا 2 نشون بده با یکیشون یجا 3 ؟
آیا این دو عملگر در سرعت و استفاده از CPU باهم تفاوت دارند؟ آخه یجا خوندم توی BENCHMARK و … تست شده و تفاوت داره

لقمان آوند

سلام
ار لحاظ کاربردی تفاوتی با هم ندارند و تو برنامه ها و پروژه هایی که ما و شما می نویسیم از لحاظ سرعت و … تفاوتشون کاملا ناچیز و نامحسوسه .
برای آگاه بیشتر از تفاوت های ریز این دو می تونید ایم قالات رو بخونید : صفحه1 صفحه2 صفحه3

امین خلیلی replyپاسخ

باسلام تنظیمات encoding
در phpstromکجا قرار دارد

امین خلیلی replyپاسخ

ویدیو را ندیده بودم دیدم تو اول ویدیو توضیحش بود متشکر

امین خلیلی replyپاسخ

استاد میخاستم در فایلphpفارسی بنویسم ولی به حروف فارسی به شکل کارکتور در می ا مد ولی کد زیر را ابتدا فایphpگذاشتم مشکل حل شد راه حلش همینه درست انجام دادم

امین خلیلی replyپاسخ


سلام این کد نوشتم دو سه بار اجرا میشه و بعد خطاهای زیر را میدهد
) Notice: Undefined variable: up in C:\wamp\www\tamrin\New folder\clender.php on line 30
Call Stack
# Time Memory Function Location
1 0.0010 136256 {main}( ) ..\clender.php:0

( ! ) Notice: Undefined variable: up in C:\wamp\www\tamrin\New folder\clender.php on line 35
Call Stack
# Time Memory Function Location
1 0.0010 136256 {main}( ) ..\clender.php:0

( ! ) Notice: Undefined variable: up in C:\wamp\www\tamrin\New folder\clender.php on line 41
Call Stack
# Time Memory Function Location
1 0.0010 136256 {main}( ) ..\clender.php:0

( ! ) Notice: Undefined variable: up in C:\wamp\www\tamrin\New folder\clender.php on line 45
Call Stack
# Time Memory Function Location
1 0.0010 136256 {main}( ) ..\clender.php:0

لقمان آوند

کدتون ناقصه .
لطفا فایلتون رو ایمیل کنید برام. اگر کدتون زیاد بود لطفا فایلش رو بدید .
این خطاها میگه متغیر up تعریف نشده. در ابتدای کدتون به این متغیر یه مقدار اولیه نسبت بدید .

امین خلیلی replyپاسخ

استاد روش کارکردم مشکلا فهمیدم فقط اگه امکان داره بفرمایید اگه بخواهیم هنگام چاپ رشته بین رشته ها فاصله ایجاد کنیم باید چه کار کنیم و اگه بخواهیم فاصله را زیاد کنیم به چه شکل است

لقمان آوند

رشته ها رو توی تگ های html بزارید و با css فاصله رو تعین کنید. یا اینکه به جای اسپیس از کد استفاده کنید.

امین خلیلی

اگه امکان داره یه مثال بزنید

لقمان آوند

امین خلیلی

استاد امتحان کردم کد را ولی فاصله ایجاد نشد
نتیجه به این شکل چاپ شد String1 String2

لقمان آوند

کد اینجا درست نمایش داده نمیشه . اینو دانلود کن .

امین خلیلی

ممنون استاد حل شد

arman zarei replyپاسخ

با سلام و خسته نباشید . ببخشید یه سوال از حضورتون داشتم . می خواستم بپرسم که در این دوره آموزش ساختن فرم ثبت نام و لوگین کاربر رو هم خواهیم داشت ؟

لقمان آوند

بله در اواخر دوره هست .

علیرضا خوش نیت replyپاسخ

سلام / خسته نباشید
استاد من وقتی encoding یه فایل رو utf-8 whitout bom قرار میدم ، عبارات فارسی به هم ریخته میشن
این در حالی هستش که وقتی utf-8 میزارم عبارات فارسی به درستی نمایش داده میشن
به نظرتون مشکل از کجا میتونه باشه ؟؟؟ ❓ ❓ ❓

لقمان آوند

اول کار انکدینگ فایل رو تعین کنید و بعد محتوا بریزید توش. اگر وقتی محتوای فارسی توشه عوض کنید ممکنه این اتفاق بیفته.

علیرضا خوش نیت

من دقیقا همون کار رو هم انجام میدم
اما بازم همچنان کلمات فارسی به هم ریخته هستن …
کلا با utf-8 without bom این مشکل هست و با utf-8 این مشکل حل میشه

لقمان آوند

عجیبه.
تو نوتپد++ هم همینطوره؟

a a replyپاسخ

سلام استاد خسته نباشید.سه تا سوال

1- پی اچ پی استورم تنظیماتی نداره که شماره خط ها معلوم باشه ؟

2- توی اون تمرین روزهای هفته من وقتی خروجی رو چاپ میکنم این شکلی میاد :
ط´ظ†ط¨ظ‡
تنظیمات utf-8 رو هم درست کردم ولی باز این شکلیه.

3- مشکل این کد رو نمیتونم پیدا کنم. یعنی اروری نمیده اما خروجیش اینه :
Unsupported (Invalid) Operator !

کدشم زیر آوردم . البته اون قسمت $result = $a + $b; توی همه ی خط های کدی که برای شما فرستادم مشکل داشت یعنی علامت همش + بود که درستش کردم ولی بازم همون خروجی رو میده

لقمان آوند

سلام
1- از مسیر زیر شماره خط ها رو فعال کنید :
Settings | Editor | (General) | Appearance | Show line numbers.
2- انکودینگ فایل utf8 without bom باشه و از تگ متای utf8 هم در صفحتون استفاده کنید .
3- در خط 5 کدی که فرستادید متغیر op مقدار * رو گرفته که دو تا اسپیس اطرافش هست. اون ها رو حذف کنید که دقیقا شبیه همونی باشه که روبروی case ها هست !

a a

سلام مجدد استاد . ممنون اون دو مورد حل شد فقط منظورتون رو از تگ متای utf8 متوجه نشدم. 🙄

لقمان آوند

این تگ html رو بالای صفحه بزارید :

a a replyپاسخ

Rochezto Delaporana replyپاسخ

سلام
آقای آوند یه سوال داشتم. در یکی از پست ها اشاره شده بود به اینکه چرا وب سایت شما وردپرسه در حالی که آموزش برنامه نویسی وب را می دهید که شما در پاسح گفتید که نیازی نیست همه چیزو از اول آدم بسازه. وردپرس خیلی از نیازهارو برطرف می کنه. من خودم اینو به عینه تجربه کردم که با وردپرس خیلی کارایه خارق العاده رو می شه با دانلود کردن یه تم ساده یا یه پلاگین ساده انجام داد. خیلی کارا هست که همین الان با کدنویسی بلدشون نیستم ولی تو ورودپرس انجام می دم. حالا سوال من اینه که پس چرا شرکت های فعال در زمینه طراحی وب انقدر تاکید می کنن به اینکه برنامه نویس از صفر تا صد وب سایت رو بدون استفاده از cms بسازه. فقط دانش استفاده و طراحی با cms برایشان برای کار کافی نیست. حتی در دنیای غرب همین شرایط حکم فرماست. چرا وضعیت به این صورته. من خودم به شخصه خیلی وقت ها این حس بهم دست می ده که حتی اگز اپلیکیشن تحت وب و یا وب سایت هم بسازم از دید حرفه ای با سطحی که وردپرس و یا جوملا بعد از این همه سال به آن رسیده اند قابل مقایسه نیست.

لقمان آوند

سلام
بله حرفتون درسته. اگر بخواید حرفه ای باشید دانشتون هم باید بالا باشه. صرف اینکه با یه cms و نحوه کار اون آشنا باشید کافی نیست. منتهی بنده اون حرف رو از این جهت زدم که ما دانش کافی برای ایجاد و اضافه کردن انواع امکانات و قابلیت ها به وردپرس رو داریم و وردپرس هم با ساختار سایت ما متناسب هست. ممکنه هر وبسایتی رو نشه با وردپرس پیاده سازی کرد و لازم باشه سراغ cms اختصاصی رفت.

Pourya Ariyafar replyپاسخ

استاد؟؟
چرا قسمت نظرت رو میبندید؟قسمت سوم و چهارم هم بسته شد 😥
بقیه رو لطفا نبندید
چرا به جای اینکه مقادیر آرایه در خروجی چاپ بشه عبارت $pointerVar چاپ میشه؟

وحید صالحی

سلام دوست عزیز کد شما یک اشتباه و یک نکته داره که باید برطرف و رعایت بشه
اشتباه : زمانی که توسط دستور echo می خواهید یک متغییر رو چاپ کنید تنها باید به نام متغییر اشاره کنید و از سینگل کوتیشن استفاده نکنید به این صورت : echo $pointerVar;
نکته : رمانی که تصمیم دارید مقدار یا مقادیر یک آرایه رو برگردونید و یا چاپ کنید حتما باید علاوه بر نام متغییری که حاوی مقادیر آرایه هست به ایندکس اعضای آرایه هم اشاره کنید وگرنه با ارور مواجه می شید چون همون طور که می دونید آرایه ها نوعی از متغییر ها هستند که می توانند n عضو داشته باشن و اگر شما در خروجی به ایندکس آرایه اشاره نکنید کامپایلر نمی تونه متوجه بشه چه عضو یا عضو هایی از آرایه مد نظر هستند و باید مثلا چاپ یا ارسال بشن ایندکس اعضای آرایه ها از0 شروع میشه بطور مثال اگر شما بخواهید مقدار 11 از کد بالا رو چاپ کنید باید به این صورت عمل کنید: echo $pointerVar[0]; همین طور تا انتها مثلا برای مقدار 22 باید از ایندکس دوم که عدد 1 هست بجای 0 استفاده کنید تا مقدار 22 برای شما چاپ بشه و…

حالا گر بخواهید مقادیر آرایه ها رو بصورت key و value چاپ کنید بجای تابع echo باید از تابع print_r استفاده کنید و این بار تنها نام متغییری که آرایه رو درونش قرار داید رو در بین پرانتزهای این تابع قرار بدید و نیاری به اشاره به ایندکس یا اینکدس های ارایه برای چاپ نداردی بصورت زیر نا گفته نمونه توابع دیگری هم برای این کار موجوده اما همین تابع print_r هم مناسبه:

print_r($pointerVar);
موفق باشید

Pourya Ariyafar

ممنون آقای صالحی برای توضیحات کاملتون
یک سوال راهی هست که بشه با دستور echo همه مقادیر داخل آرایه رو چاپ کرد؟ مثل تابع print_r

وحید صالحی

خواهش می کنم بله میشه فقط باید بصورت متوالی بعد از اشاره به متغیر حاوی آرایه ایندکس ها رو هم مشخص کنید مانند حالت زیر و حتما باید توسط .” “. با هم دیگه کام کت بشن و گرنه با ارور مواجه خواهید شد
echo $pointerVar[0] . “, ” . $pointerVar[1] . ” ,” . $pointerVar[2] ;

a a replyپاسخ

درست شد استاد . اینو گذاشتم اول صفحه درست شد .

🙂

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.