دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم

سلام به همگی توی این قسمت میخوایم وارد بحث کلاسها بشیم و همینطور که پیش میریم با چندتا باگ دیگه برخورد میکنیم که بهتون میگم چه جوری برطرفش کنید .واسه تعریف کردن کلاس از کلمه class استفاده میشه و زمانی که توی کلاسون میخوایم تابع سازنده داشته باشیم باید اسم اون تابع رو ()construct___ بزاریم، در ابتدا یه فایل بنام Bootstrap.php توی فولدر Libs میسازیم. و کدهای زیر توش مینویسیم (در واقع داریم کلاسی بنام Bootstrap ایجاد میکنیم، در ادامه نقش این فایل رو در وب سایتمون میفهمید)

<?php
class Bootstrap
{
	function __construct()
	{
	}
}

حالا کد های php که توی فایل index.php در قسمت قبلی نوشتیمو اضافه میکنیم به فایل Bootstrap و کدهای php صفحه index.php بصورت زیر ویرایش میکنیم :

کدهای Bootstrap :

<?php

class Bootstrap
{
	function __construct()
	{
		if(!isset($_GET['url']))
		{
			$url = 'index';
		}
		else
		{
			$url = $_GET['url'];
		}
		
		$url = explode('/', $url);
		//print_r($url);
		
		if(!file_exists("Controllers/".$url[0].".php"))
		{
			echo "Not Found Page";
		}
	}	
}

کدهای php صفحه index.php :

<?php

	require("libs/Bootstrap.php");	
	$app = new Bootstrap();
	
?>

اگه بخوایم کدهای یه فایل دیگه رو توی یه فایل دیگه استفاده کنیم از تابع require استفاده میکنیم و خط دوم هم یه شی از نوع کلاس Bootstrap میسازه به نام app$ .

خوب باید سه تابع دیگه بنام های Index,About,Login ایجاد کنیم، پس کدهای زیر توی فایل های Index.php , About.php , Login.php که توی فولدر Controllers هستن مینویسیم . (توی قسمتهای قبلی آموزش، این فایل هارو ایجاد کردیم)

کد About.php :

<?php

class About
{
	function __construct()
	{
		echo "<br>Page About ";
	}
}

کد Index.php :

<?php

class Index
{
	function __construct()
	{
		echo "<br>Page Index ";
	}
}

کد Login.php :

<?php

class Login
{
	function __construct()
	{
		echo "<br>Page Login ";
	}
}

خوب حالا یه تست میکنیم ببینیم چه جوری اجرا میشه :

دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم

طبق کدی که من توی کلاس About نوشتم باید زمانی که صفحه about باز میشه متن Page About برام چاپ بشه ولی نشد، مشکل کجاست ؟

باید توی کلاس Bootstrap کدی بنویسیم تا برنامه بفهمه زمانی که توی URL آدرس صفحات سایت تایپ میشه، محتویات اون صفحه نمایش داده بشه .

بعد از آخرین دستور If ، یه else اضافه میکنیم که کدش بصورت زیر میشه :

if(!file_exists("Controllers/".$url[0].".php"))
{
	echo "Not Found Page";
}
else
{
	$file = "controllers/".$url[0].".php";
	require($file);
	$controller = new $url[0]();
}

کد بالا چک میکنه اگه URL ی بنویسیم که وجود نداره خطا بده، در غیر این صورت صفحه مورد نظر نشون بده و در اینجا مقدار [0]url$ برابر about هست، در نتیجه زمانی که کد اجرا میشه ()about بجای ()[0]url$ قرار میگیره و صفحه about نمایش داده میشه .

دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم

میبینید که جواب داد میتونید بقیه صفحه هارو هم امتحان کنید و اگه url ی وارد کنیم که صفحه ش وجود نداره بهمون خطا میده .

حالا اگه آخر کد Bootstrap و کد About بصورت زیر تغییر بدیم :

کد Bootstrap :

else
{
	$file = "controllers/".$url[0].".php";
	require($file);
	$controller = new $url[0]();
	$controller->$url[1]();	
}

کد About :

<?php

class About
{
	function __construct()
	{
		echo "<br>Page About ";
	}
	
	function AboutMe()
	{
		echo '<br>........About Me..........<br>';
	}
}

اگه URL بصورت زیر وارد کنیم نتیجه اینجوری میشه :

دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم

Aboutme بعنوان یکی از توابع کلاس About هست ، که اینجوری توی URL میشه بهش دسترسی داشت .

اگه این سری URL بصورت زیر وارد کنیم :

دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم

نتیجه اینه که کلی به ما خطا میده ، کدهای Bootstrap بصورت زیر ویرایش میکنیم تا دیگه بهمون خطا نده .

else
{
	$file = "controllers/".$url[0].".php";
	require($file);
	$controller = new $url[0]();
	if(!empty($url[1]))
	{
		$method_name = $url[1];
		if(method_exists($controller, $method_name))
		{
			$controller->$method_name();
		}
		else
		{
			echo "<br>method not found<br>";
		}
	}	
}

تابع empty چک میکنه که آیا مقداری توی متغیر وجود داره یا نه . (با تابع isset فرق میکنه)

یه متغیر بنام methodname$ تعریف کردم و مقدار [1]url$ داخل میریزم و بعد با تابع methodexists چک میکنم که آیا تابعی با این نام (یعنی مقدار داخل method_name$) توی کلاس وجود داره یا نه ؟! اگه وجود داشت تابع رو فراخوانی میکنه وگرنه به ما خطای method not found میده . (توی زبانهای برنامه نویسی دیگه زمانی که میخواستیم به توابعی از یه کلاس دسترسی داشته باشیم بعد از نام اون کلاس کاراکتر "." میزاشتیم و بعد نام تابع، ولی اینجا به جای "." از "<-" استفاده میشه)

خوب حالا اگه خواستیم یه مقدار به تابعی که توی کلاسمون ایجاد کردیم بدیم و اون تابع بر حسب مقداری که بهش دادیم اعمالی رو انجام بده باید کدهارو کمی تغییر بدیم :

تابع Aboutme یا بصورت زیر تغییر میدیم :

function AboutMe($str = false)
{
	if($str == true)
	{
		echo '<br>........'.$str.'..........<br>';
	}
	else
	{
		echo '<br>........About Me..........<br>';
	}
}

یا هم بصورت زیر :

function AboutMe($str = '')
{
	if(empty($str) == false)
	{
		echo '<br>........'.$str.'..........<br>';
	}
	else
	{
		echo '<br>........About Me..........<br>';
	}
}

کد Bootstrap :

if(!empty($url[1]))
{
	$method_name = $url[1];
	if(method_exists($controller, $method_name))
	{
		if(!empty($url[2]))
		{
			$parametr = $url[2];
			$controller->$method_name($parametr);
		}
		else
		{
			$controller->$method_name();
		}
	}
	else
	{
		echo "<br>method not found<br>";
	}
}

یه متغیر بنام parametr$ تعریف کردم، که اگه مقداری توی [2]url$ بود این مقدار ریخته میشه توی متغییر parametr$ و به عنوان پارامتر تابع استفاده میشه .

دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم

امیدوارم از این قسمت هم استفاده لازم برده باشید .

نویسنده : مهدی رزمجویی

منبع : جزیره طراحی و توسعه وب وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد

#آموزش_mvc_توی_php #آموزش_mvc_و_oop_در_php #آموزش_گام_به_گام_php #تابع_file_exists #آموزش_php #کلاس_در_php #تابع_در_php #oop_در_php #تابع_method_exists #آموزش_mvc_در_php
عنوان
1 دوره آموزشی برنامه نویسی MVC در PHP قسمت اول رایگان
2 دوره آموزشی برنامه نویسی MVC در PHP قسمت دوم رایگان
3 دوره آموزشی برنامه نویسی MVC در PHP قسمت سوم رایگان
4 دوره آموزشی برنامه نویسی MVC در PHP قسمت چهارم رایگان
5 دوره آموزشی برنامه نویسی MVC در PHP قسمت پنجم رایگان
6 دوره آموزشی برنامه نویسی MVC در PHP قسمت ششم رایگان
7 دوره آموزشی برنامه نویسی MVC در PHP قسمت هفتم رایگان
8 دوره آموزشی برنامه نویسی MVC در PHP قسمت هشتم رایگان
9 دوره آموزشی برنامه نویسی MVC در PHP قسمت نهم رایگان
10 دوره آموزشی برنامه نویسی MVC در PHP قسمت دهم رایگان
11 دوره آموزشی برنامه نویسی MVC در PHP قسمت یازدهم رایگان
12 دوره آموزشی برنامه نویسی MVC در PHP قسمت دوازدهم رایگان
13 دوره آموزشی برنامه نویسی MVC در PHP قسمت سیزدهم رایگان
14 دوره آموزشی برنامه نویسی MVC در PHP قسمت چهاردهم رایگان
زمان و قیمت کل 0″ 0
12 نظر
آگرین

با سلام . بابت آموزش خوبتون بسیار سپاسگزارم. یه سوال داشتم من همه ی مراحل بالا و رفتم ولی وقتی آدرس about و توی url وارد میکنم خطای زیر و میده

undefined variable url in c:wamp\www\php-mvc\index.php

لطفا راهنماییم کنید

آگرین
اشکال کلاس bootstrap چیه؟
class Bootstrap
{
	
    function __construct()
{
        if(!isset($_GET['url']))
        {
            $url = 'index';
        }
        else
        {
            $url = $_GET['url'];
        }
         
        $url = explode('/',$url);
        //print_r($url);
         
        if(!file_exists("Controllers/".$url[0].".php"))
        {
            echo "Not Found Page";
        }
		else{$file = "controllers/".$url[0].".php";
    require($file);
    $controller = new $url[0]();
	   
   if(!empty($url[1]))
{
    $method_name = $url[1];
    if(method_exists($controller,$method_name))
    {
        if(!empty($url[2]))
        {
            $parametr = $url[2];
            $controller->$method_name($parametr);
        }
        else
        {
            $controller->$method_name();
        }
    }
    else
    {
        echo "<br>method not found<br>";
    }
}   
		
		
		}
	
	}
	 } 

مهدی رزمجویی

با سلام

اگه از قسمت اول آموزش ها رو دنبال کرده باشید نباید به خطا بر بخورید، این خطا میگه متغییر url تعریف نشده یا وجود نداره توی صفحه index.php (توی پوشه اصلی سایت)، توی صفحه index.php از متغیر url استفاده کردید که باید قبلش تعریفش کنید ، اوایل آموزشها از این متغیر توی صفحه index.php استفاده کردیم که بعدش پاکش کردیم،در کل لازم نیست از متغیر url توی index.php استفاده کنید .

آگرین

کدای bootstrap ودرست نوشتم؟

مهدی رزمجویی

کدای bootstrap تون مشکلی نداشت، مشکل توی کدای index.php (توی پوشه اصلی سایت) هست .

آگرین

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

آگرین

واقعا عذر میخام که اینقد سوال میپرسم اما هر کدوم از صفحا رو که اجرا می گیرم این خطا رو میده.

syntax error, unexpected $method-name(t_VARIABLE ) in c:\ wamp \www\ php-mvc\libs \bpptstraps

دیگه واقعا نمیدونم باید چی کار کنم

مهدی رزمجویی

خواهش میکنم

بخاطر اینکه توی هر قسمت وب سایت کاملتر میکنیم مجبوریم هی تغییرات توی کدای سایت بدیم ، ولی اگه با دقت آموزش هارو دنبال کنید به مشکل بر نمیخورید .

کارایی که از قسمت اول تا چهارم انجام دادیم آپلود کردم میتونید از این لینک دانلود کنید .

موفق باشد ...

آگرین

خیلی لطف کردید. متشکرم.

galaxy.cactus

سلام خیلی ممنون استفاده کردم.

galaxy.cactus

سلام خیلی ممنون استفاده کردم.

mehdi2237

جدیدا موندم چرا همه ی اموزش دهنده ها سعی دارن خودمونی بنویسن

هی از جملات محاوره ای و خاطره گویی استفاده کنن

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

جمله طرف رو میخونی باید 15 بار بخونی تا بفهمی اره منظور این بوده....

بعد اینجور نظرای انتقادی رم به چیز میگرن و

فقط نظراتی که گفتن وای تو چقدر خوبی عزیزدلم و... رو چاپ میکنن

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....