# زبان های اسکریپتی > PHP > تاپیک های آموزشی و دنباله دار >  آموزش شی گرایی در php

## reza_alie

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

----------


## reza_alie

یکی از مشکلات برنامه نویسی فراموشی syntaxو سلسله مراتب توابع زبان برنامه نویسی می باشد.
شعار برنامه نویسی شی گرا "دنیا را آنچنان که هست برنامه نویسی کنیم" می باشد.
و phpبه مانند سایر زبان های برنامه نویسی سعی در مدل کردن برنامه ها،مطابق دنیای پیرامون می باشد که مدل کردن دنیای پیرامون در ساختار کامپیوتر را شی گرایی می گویند.
مفهوم شی:
مهمترین مولفه در برنامه نویسی شی گرا می باشد شی در برگیرنده ویژگی ها و رفتار های یک موجودیت می باشد.به عنوان مثال در یک buttonمی تواند یک شی باشد ای نشی هم ویژگی هایی دارد و هم رفتار.
اعضای یک شی:
شی از ترکیب ویژگی ها و رفتار ها (توابع) ایجاد شده است .تابع عضو یک شی را متد می گویند.که متغیر ها و متد ها را می توان در سه حوزه (seope)تعریف کرد.و حوزه دسترسی مشخص می کندکه اشیا دیگر می توانند به آن متغیر ها دسترسی داشته باشند یا نه؟ که در ادامه به بررسی این سه حوزه می پردازیم.
نحوه تعریف کلاس:


Class my_class
//my_class:نام کلاس
{
//محل تعریف متغیر ها و متدها
}



مثال عملی:
می خواهیم دراین بخش یک کلاسی تعریف کنیم که شامل یک سری متد ها و متغیر ها می باشد.
کاربر یک رشته ای را وارد می کند اگر داخل رشته علامت* بود به && تبدیل کند:
کد php:

/**
*in the name of allah
*author:reza_alie
*/
 
class myclass
{
           
            function replace_str($str_input)
            {
                        return str_replace('*', '&&', $str_input);//سه پارامتر می گیرد که اولی مقداری که می خواهیم به دنبال آن بگردیم و پارامتر دوم مقدار جایگزینی است و پارامتر سوم رشته ورودی می باشد str_replaceهمانطور که می دانید تابع 
            }
}
$myclass=new myclass();// برای درست کردن یک شی از یک کلاس از کلمه کلیدی new استفاده میکنیم 
 
echo $myclass->replace_str("this *is *test");//برای دسترسی به متد های یک کلاس از علامت->استفاده می کنیم
 
/**
*
*output : this &&is &&test
*/

----------


## reza_alie

مثال دوم برای درک بهتر:


class myclass
{
var $text="this is test";
/**
برای تعریف متغیری به نام
$text
از کلمه کلیدی
var
استفاده می کنیم .
 
*/
function do_print()
{
echo $this->text;
/**
برای فراخوانی متد ها یا متغیر های شی بایستی از کلمه کلید
$this->
استفاده کنیم
*/
}
}
$myclass=new myclass();
//$myclass->text="im reza alie";
//برای ریختن مقدار جدید در متغیر می توانیم از کد فوق استفده کنیم
$myclass->do_print();

----------


## Pedram77

ارث بری :
class Student extends Human
{
// methods and properties
}

رابط (Interface) :

interface HumanActions
{
public function eat();
public function sleep();
public function run();
}

class Human implements HumanActions
{
public function eat()
{

}
// etc ...
}

----------


## emperatorphp

> یکی از مشکلات برنامه نویسی فراموشی syntaxو سلسله مراتب توابع زبان برنامه نویسی می باشد.
> شعار برنامه نویسی شی گرا "دنیا را آنچنان که هست برنامه نویسی کنیم" می باشد.
> و phpبه مانند سایر زبان های برنامه نویسی سعی در مدل کردن برنامه ها،مطابق دنیای پیرامون می باشد که مدل کردن دنیای پیرامون در ساختار کامپیوتر را شی گرایی می گویند.
> مفهوم شی:
> مهمترین مولفه در برنامه نویسی شی گرا می باشد شی در برگیرنده ویژگی ها و رفتار های یک موجودیت می باشد.به عنوان مثال در یک buttonمی تواند یک شی باشد ای نشی هم ویژگی هایی دارد و هم رفتار.
> اعضای یک شی:
> شی از ترکیب ویژگی ها و رفتار ها (توابع) ایجاد شده است .تابع عضو یک شی را متد می گویند.که متغیر ها و متد ها را می توان در سه حوزه (seope)تعریف کرد.و حوزه دسترسی مشخص می کندکه اشیا دیگر می توانند به آن متغیر ها دسترسی داشته باشند یا نه؟ که در ادامه به بررسی این سه حوزه می پردازیم.
> نحوه تعریف کلاس:
> 
> ...



سلام چرا این دستور کار نمیکنه؟میشه راهنمایی کنی؟
class myclass{
    function replace_str($str_input) {
        return str_replace("-","_",$str_input);
  }
}
if (isset ($_POST["btnsabt"]) && isset ($_POST["mytext"]) ) {
    $replacer = new myclass();
    $reste=$_POST["mttext"];
    echo $replacer->replace_str($reste);
}
?>
<form method="post">
    <input type="text" name="mytext">
    <input type="submit" name="btnsabt">
</form>

----------


## reza_alie

برای این که از کلاس نمونه سازی نکردید

$myclass=new myclass();
$myclass->replace_str("");



تشکر =رضایت

----------


## meysam1366

$replacer = new myclass();
    $reste=$_POST["mttext"];
    echo $replacer->replace_str($reste);

سلام

پس این چیه؟ :متفکر:  :متفکر:

----------


## emperatorphp

> $replacer = new myclass();
>     $reste=$_POST["mttext"];
>     echo $replacer->replace_str($reste);
> 
> سلام
> 
> پس این چیه؟



سلام بامنی الان؟

----------


## meysam1366

> سلام بامنی الان؟


سلام

نه با آقا رضا بودم

شما یک نمونه از شی گرفته بودید اما آقا رضا به شما فرموده بودن که یک نمونه از شی ایجاد کنید مثل اینکه ندیده بودن کدهای شما رو

----------


## mehdi mah

کد شما واسه من کار میکنه 
فکر میکنم اگر اشتباه نکرده باشم ایراد از کد php تون نیست ایراداز کد html هستش دقیق تر نگاه کنید شاید نسخه xammp یا wammp شما نیاز داره که ادرس دقیق به فرم داده بشه
البته من یه اشتباهی تایپی داشتی اون رو رفع کردم

----------


## phpphp7

> یکی از مشکلات برنامه نویسی فراموشی syntaxو سلسله مراتب توابع زبان برنامه نویسی می باشد.
> شعار برنامه نویسی شی گرا "دنیا را آنچنان که هست برنامه نویسی کنیم" می باشد.
> و phpبه مانند سایر زبان های برنامه نویسی سعی در مدل کردن برنامه ها،مطابق دنیای پیرامون می باشد که مدل کردن دنیای پیرامون در ساختار کامپیوتر را شی گرایی می گویند.
> مفهوم شی:
> مهمترین مولفه در برنامه نویسی شی گرا می باشد شی در برگیرنده ویژگی ها و رفتار های یک موجودیت می باشد.به عنوان مثال در یک buttonمی تواند یک شی باشد ای نشی هم ویژگی هایی دارد و هم رفتار.
> اعضای یک شی:
> شی از ترکیب ویژگی ها و رفتار ها (توابع) ایجاد شده است .تابع عضو یک شی را متد می گویند.که متغیر ها و متد ها را می توان در سه حوزه (seope)تعریف کرد.و حوزه دسترسی مشخص می کندکه اشیا دیگر می توانند به آن متغیر ها دسترسی داشته باشند یا نه؟ که در ادامه به بررسی این سه حوزه می پردازیم.
> نحوه تعریف کلاس:
> 
> ...


سلام
من این دو خط زیر رو متوجه نمیشم !!



> $myclass=new myclass();// برای درست کردن یک شی از یک کلاس از کلمه کلیدی new استفاده میکنیم 
> 
> echo $myclass->replace_str("this *is *test")


کد $this-> برای چی استفاده میشود؟

خب این کلاس که شبیه همون تابع هست ! پس چرا از همون تابع استفاده نکنیم ؟

----------


## mehdi mah

از this برای دسترسی به متغیر های درون کلاس استفاده میشه

----------


## reza_alie

سلام



> سلام
> من این دو خط زیر رو متوجه نمیشم !!
> _
> $myclass=new myclass();// برای درست کردن یک شی از یک کلاس از کلمه کلیدی new استفاده میکنیم 
> 
> 
> _
> 
> _echo $myclass->replace_str("this *is *test")
> _


دوست عزیز سلام
کلمه newبرای نمونه سازی از کلاس هست
و همانطور که دوست گرامی mehdi mah  فرمودنداز this برای دسترسی به متغیر های و متدهای  درون کلاس استفاده میشه

----------


## mehdi mah

> $replacer = new myclass();
>     $reste=$_POST["mttext"];
>     echo $replacer->replace_str($reste);
> 
> سلام
> 
> پس این چیه؟


سلام دوست گرامی وقتی میگیم این کد کار نمیکنه ممکنه منظورهای متفاوتی داشته باشیم اینکه صفحه سفید نشون میده این که یه ارور وارنینگ میده یا اینکه ارور نوتیک میده یا اینکه نتیجه بر نمیگردونه و هزاران حالت مختلف کد بالا برای من درس کار کرد ولی با این تفاوت که من بجای کپی پست کردن کدها بر اساس یه عادت خودم تایپ میکنم
سوال دوستمون اشتباه بود باید میگفتند خروجی مناسب برنمیگردونه من بعد از دقت متوجه شدم اشتباه تایپی داشتند در قسمت 
 $reste=$_POST["mttext"];
و بجای my txt نوشتن mt txt 

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

----------


## phpphp7

> مثال دوم برای درک بهتر:
> 
> 
> class myclass
> {
> var $text="this is test";
> /**
> برای تعریف متغیری به نام
> $text
> ...


کد اول و کد دوم برای چی هستند ؟ چرا مکمل هم هستند؟



$myclass=new myclass();

$myclass->do_print();

----------


## reza_alie

> کد اول و کد دوم برای چی هستند ؟ چرا مکمل هم هستند؟
> 
> 
> 
> $myclass=new myclass();
> 
> $myclass->do_print();


سلام
کد اول برای ایجاد شی جدید  هست و در خط دوم با استفاده از ->به متد do_printدسترسی پیدا کردیم

----------


## MMSHFE

> سلام
> من این دو خط زیر رو متوجه نمیشم !!
> 
> 
> کد $this-> برای چی استفاده میشود؟
> 
> خب این کلاس که شبیه همون تابع هست ! پس چرا از همون تابع استفاده نکنیم ؟


این لینک رو بخونید: http://www.barnamenevis.ir/articles/28/%D8%A...AF%D9%87%D9%85 

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

----------


## Mohammadsgh

> کد اول و کد دوم برای چی هستند ؟ چرا مکمل هم هستند؟
> 
> 
> 
> $myclass=new myclass();
> 
> $myclass->do_print();


ببینید اگر بخوام ساده بگم.ایشون اومدن یک کلاس با نام myclass ایجاد کردن.برای اینکه بتونیم از اون کلاس استفاده کنیم باید ازش یک شی بسازیم که ایشون روش ساخت شی رو گفتن که با واژه کلیدی new این کار انجام میشه.هر گونه پرسش و ابهامی داشتید بپرسید

----------


## arash691

مفاهیم شئ گرایی از روش استفاده اونا مهم تره بهتره چند جلسه ی اول رو به تشریح مفاهیم شئ گرایی بپردازید تا ذهن خواننده درک بهتری از مطالبتون داشته باشه ...

----------


## behzadamin12

خوب و عالی
لطفا نظرت رو درمورد این آموزش هم بده
https://jobteam.ir/ProductUser/138-php-oop

----------

