آموزش مباحث شی گرایی فریم ورک Yii
با سلام خدمت دوستان
اگر مدیران بخش اجازه بدهند من مباحث شی گرایی فریم ورک yii رو در این تاپیک جمع کنم، دوستان هم اگر سوال در مورد شی گرایی چه در php چه در فریم ورک yii دارند در این تاپیک عنوان کنند، من مباحث شی گرایی را در بخش آموزش yii گذاشته بودم که به پیشنهاد مهندس نریمان در این تاپیک جمعش می کنم، من تمامی تاپیک های شی گرایی را از بخش آموزش به اینجا منتقل کردم. از دوستان هم دعوت می کنم که کسی از کمک دریغ نکنه.
با آرزوی موفقیت برای همه دوستان
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
بسم الله الرحمن الرحیم
دوستان دنیای ما دنیایی هست که می تونی به نحوی این طور تعریفش کنم: این دنیا دنیای شی گرایی هست چون هر چیزی را ما داریم می بینیم بازخوردی از اشیای دور و اطراف ماست.
برای اینکه ما بتوانیم با این فریم ورک و همچنین فریم ورک های در سطح جهان آشنا شویم نیاز به آشنایی با مسائل شی گرایی داریم.
فریم ورک Yii یک فریم ورکی هست که مبتنی بر شی گرایی و همچنین از تکنولوژی MVC بهره گرفته شده است.
چیزی که یک زبان را قدرتمند جلوه می کنه و به اون قدرت میده به نظر من یکی از عوامل اون همین فریم ورک و کتابخانه های مکمل آن هستند، شما چهار چوب دات نت را ببینید، آیا C# به خودی خود قدرتی داره؟ مگر غیر از این هست که سی شارپ یعنی حلقه For، یا int a=0; یا... این کتابخانه های دات نت هست که به اون قدرت بخشیده است.
خوب پس یک زبان وقتی می تونه قدرت مند تر باشه که یک فریم ورک خوب پشت اون باشه مثلا حتما با Jquery کار کردید، دوستانی که عملی با اون کار کرده باشند می دونند در مقابل Dojo، Jquery واقعا حرفی برای گفتن نداره اما علت محبوبیت Jquery که بارها در اینترنت دیدم و همچنین علت افت استفاده کاربران از Dojo به دلیل نبود یک Document خوب برای Dojo هست.
پس من دارم فاکتور های خوب را برای انتخاب فریم ورک نام می برم:
1- پشتیبانی خوب
2- داشتن یک Document خوب برای manual
3- همراه بودم با تکنولوژی روز
4- سادگی استفاده
5- قدرت کتابخانه های موجود
6- امنیت
7- سرعت
8- قابل استفاده برای پروژه بعدی
9- حرفه ای
10- ایزوله بودن
من می تونم بگم که yii تمام این مشخصات را زیاد تر هم همراه داره.
خوب بدون اینکه بخوام ترتیبی داشته باشیم شروع می کنم به نام بردن زبان ها و فریم ورک های پر قدرت هر کدام:
Java با Spring قدرت پیدا می کنه.
C# با .Net
Ruby با Rails
PHP با Yii
همینطور که در تعریف و جواب گویی خود طراحان این فریم ورک می بینیم هم علت نام گزاری این فریم ورک همین دلایلی بود که نام بردم. مضاف بر اینکه جایی خوندم آقای Qiang Xue and Xiang Wei Zhuo گفته بودند ما سال ها روی فریم ورک Prado کارکردیم، و کاملش کردیم اما تازه یاد گرفتیم چطور باید فریم ورک بسازیم، پس این خیلی ازشمند هست.
Yii مخفف سه کلمه یا حرف Yes It Is می باشد که در پاسخ به سوالات همچون آیا این فریم ورک سریع هست؟ آیا اون امن هست؟ ایا .....
می باشد و در جواب به همه این سولات باید بگوییم "بله اون هست".
کلیات اومد دستمون، فهمیدیم که چه علم هایی را باید برای یادگیری این فریم ورک پیش فرض داشته باشم و اون فقط دونستن پی اچ پی خام و علم شی گرایی هست.
اگر دوستان موافق باشند من علم شی گرایی رو در چند سطر توضیح بدم و همین جامفهموم namespace در پی اچ پی را بازگو کنم تا بهتر بتونیم قبل از یادگیری این چهارچوب با اون کنار بیایم.
خودتون را در نظر بگیرید که در خارج از کشور هستید، اگر از من بپرسن که ادرس محل سکونت شما کجاست آیا من می گم خیابان مهرداد!!! یا نه من باید قبل از هر چیز معلوم کنم دقیقا در کجا زندگی می کنم. من می گم کشور ایران- استان اصفهان-شهر اصفهان- خیابان مهرداد- کوچه ....
خوب در PHP هم اگر بخوام این حرف ها را به شی گرایی تبدیل کنم این طور مثال می زنم:
namespace Iran\Isfahan {
class Isfahan
{
public function MehrdadStreet(){
echo 'Barnamenevis.com';
}
}
}
یا
namespace Iran\Isfahan {
class KashanCity
{
public function MehrdadStreet(){
echo 'Barnamenevis.com';
}
}
}
همینطور که می بینید namespace صرفا یک سری اسم و طبقه بندی کردن هست، به همین خاطر هم هست که ما می تونیم اصلا از namespace استفاده نکنیم چون همونطور که از اسمش معلومه فقط یک فضای نامی هست.
پروژه بدون namesapce هم اجرا میشه.!!!!!
نکته ای که هست به یاد داشته باشید دوستان اگر ما بخواهیم در یک فایلphp چند کلاس هم نام داشته باشیم که در هر کدوم متد های خاصی طراحی کنیم و هرکدوم از اون متد ها رفتار خاص خودشون را داشته باشند اما نام کلاسشون یکی باشه1!!!!! امکان نوشتنش بدون namespace امکان پذیر نیست مگر اینکه از این مکانیسم استفاده کنیم
مثال را ببینیم:
namespace Iran {
class Tehran
{
public function ShirodiStreet(){
echo 'Hello my city';
}
}
}
namespace Irann{
class Tehran{
public function KeshvariStreet(){
echo 'Hello my city';
}
}
}
بسیار خوب.
برای شروع کار ما نیازمند ابزارهای لازم هستیم.
1- یک شبیه ساز که بتونه نقس سرور را براتون بازی کنه و فایل های php را ترجمه و اجرا کنه مثل wamp –lamp-xammp-easyphp
مثلا سایت:www.wampserver.com
یا در Github سرچش کنید و دانلودش کنید.
2- نسخه php حتما باید از 5.0 به بالا باشه. برای ساپوت کردن بحث namespace به نسخه 5.3.0 به بالاتر این زبان نیاز دارید، و همچنین برای ساپورت کردن از Trait ها باید از نسخه 5.4.0 به بالا استفاده کنید
3- Apache , Mysql که ما ایرانی ها همه ورژن بالا را معمولا داریم
4- خود پوشه فریم ورک که می توانید از سایت زیر دانلودش کنید
www.yiiframework.com/download/
در قسمت دوم می خوام استارت کار را بزنم و بگم چطور باید از این عناصر کمک گرفت و به کار بست
پایان قسمت اول.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
برای شروع مباحث شی گرایی من مقدماتی را مطرح می کنم که امیدوارم زیاد تکراری و کلیشه ای نباشند.
ببینید دوستان همونطور که در پست های قبلی خودم گفتم دنیای ما دنیای شی گرایی هست. در همه آموزش های مباحث شی گرایی یا ماشین رو یا انسان یا... را مثال می زنند، بذارید یک شی را تعریف کنیم:
موجودیتی که از خودش رفتار و دارای خصوصیات باشد.
مثلا یک انسان
خصوصیات: رنگ پوست، قد، جوان بودن یا پیر بودن یا....
رفتار: دویدن، حرف زدن و...
خوب همین را بیاید در قالب یک شی به PHP معرفی کینم، من همیشه رفتار ها را متد یا function و خصوصیات را Properties در یک کلاس در نظر می گیرم.
پس شی یا موجودیت انسان در تعریف اینطور میشه:
class Human{
private skinColor;
public function tell(){
echo ‘Salam’;
}
}
خوب همینطور که می بینیم این کلاس به عنوان یک شی یا موجودیت در php تعریف گردید. کلمه class به عنوان یک تفکیک کننده یا دسته بندی استفاده میشود.
حالا اگر روزی انسانی به دنیا بیاد که رنگ پوستش آبی باشه آیا می تونیم این انسان را جزو گروه انسان ها قرار دهیم یا نه؟ مطمئنا جواب بله هست.
اما اگر روزی انسانی به دنیا بیاد که مثلا بال داشته باشه حالا چی؟ بذاریم تو گروه انسان ها یا خیر؟ جواب خیر هست، ما میایم یک گروه ایجاد می کینم به اسم گروه انسان های بال دار و این انسان را در این گروه قرار می دهیم تا یک هم گروهی براش پیدا کنیم.
پس فاکتور ما برای گروه بندی کمیت هست نه کیفیت!!!!!!!
خوب ما عمل دسته بندی را انجام دادیم، همینطور که می دونیم ما انسان های متفاوت در مکان های متفاوت داریم، که میشه همون مبحث namespace که قبلا توضیحش دادم.
نوبت به این میرسه که دسترسی ها و انواع کلاس ها را بررسی کنیم، در این مثال می تونم بگم 80% علم شی گرایی وجود داره.
namespace PHP {
abstract class Programmer
{
final public static function work()
{
}
}
}
چطور من دارم میگم که 80% علم شی گرایی همین الان در همین 2 خط برنامه نویسی هست؟
به این دلیل که مفهموم namespace را داریم کلاس معمولی یا abstract را داریم، انواع حالات و دسترسی های یک function را هم داریم.
آیا نیازی به توضیح کلمات بالا هست؟
مطمئنا همه با این مفاهیم آشنا هستیم.
قوانین دیگری که شما باید در yii رعایت کنید یادگرفتم capitial یا camel case نوشتن اسامی متد ها و متغیر ها و ... می باشد.
یادتون باشه دوستان در yii به دلیل اینکه php 5.0 از مفهموم namespace پشتیبانی نمی کند برای اینکه کلاس ها با همدیگر کانفلیکت نامی نداشته باشند از حرف C برای شروع نام گزاری تمامی کلاس های خود استفاده می کند.
پس یادتون باشه شما ترجیحا این کار را نکنید.
برای نام گزاری کلاس ها از استاندارد captial استفاده کنید و نام های کلاس ها را با حرف بزرگ شروع کنید مثلا:
class Barnamenevis{
}
class BarnamenevisPhp{
}
برای نام گزاری متد ها و متغیر ها از استاندارد camelcase استفاده کنید مثلا:
$helloWorld=10;
function getStudentName(){
}
Properties های private کلاس را با Underline شروع کنید مثلا:
class BarnamenevisPhp{
private $_name;
}
البته دوستان رعایت کردین این موارد اجباری نیست اما اگر کسی از این استاندارد ها در کد نویسی استفاده کنه کد اون شخص خوانا تر و حرفه ای تر می باشد.
البته بسیاری قوانین دیگر هم و جود دارند که انشا الله دوستمون در ترجمه برای شما بازگو خواهند کرد.
سوالی که من از دوستان دارم و می خوام که به اون فکر کنند اینه که آیا در جهان واقعی ما کلاس انسان را ایجاد کردیم یا کلاسی وجود داشته و ما خواه یا ناخواه وارد اون کلاس شدیم؟
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
سلام خدمت همه دوستان
در بخش دوم من شروع می کنم به یک توضیح اجمالی و بعد از اون هم شروع به کار با Yii.
در بخش قبل ما با کلیات آشنا شدیم در قسمت پایانی من عناصر مورد نیاز را نام بردم از جمله دانلود فریم ورک.
بعد از دانلود فریم ورک شما باید پوشه ی yii را به داخل پوشه www در wamp ویا htdoc درxampp انتقال دهید که قابل جابجایی به هر جای دیگری می باشد اما فعال در این فولدر قرار می دهیم تا در مراحل بعد یاد بگیریم چطور باید مسیر را برای آن تغییر دهیم.
یادتان باشد که نام پوشه را به yii بدون هیچ حرف اضافی در نام تغییر نام دهید.
همینطور که در عکس مشاهده می کنیم.
http://www.mediafire.com/conv/9c9ce6...b680885e6g.jpg
در مرحله بعد شما باید فایل php.exe را به مسیر اجرایی سیستم عامل ویندوز خود اضافه کنید تا بتوانید از CMD برای ساخت پروژه جدید استفاده کنیم که در عکس مراحل کاملا واضح هستند.
http://www.mediafire.com/conv/1811d6...c062337d6g.jpg
http://www.mediafire.com/conv/25f021...7eae9f766g.jpg
http://www.mediafire.com/conv/9a8b1b...7ddfd9ac6g.jpg
در مسیر path این خط را اضافه کنید البته اگر wamp شما در درایو c و همچنین yii را در درایو C قرار داده باشید
C:\wamp\www\yii\framework;C:\wamp\bin\php\php5.3.8 ;
حالا قبل از هر کاری شما در url مروگر خود تایپ کنید
Localhost/yii/requirements/
و اینتر را بزنید
این صفحه برای شما ظاهر می گردد
http://www.mediafire.com/conv/ce1b2d...602c49bd6g.jpg
در این Page شما نیازمندی های این فریم ورک را می بینید که با رنگ ها و کلمات pass یا... مشخص شده است. برای اینکه پروژه هایی که با yii می سازید قابلیت ارتباط با بانک را داشته باشد باید دو عنصر مشخص شده حتما pass شده باشند در غیر این صورت در php.ini ، Extention آن را فعال کنید.
خوب حالا بریم به اجرا CMD ویندوز و نوشتن خط فرمان های مورد نظر که در شکل به طور کامل نمایش داده شده است، به ترتیب نوشتن دستورات توجه کنید.
http://www.mediafire.com/conv/be98fb...9f5b9c1f6g.jpg
http://www.mediafire.com/conv/7f2006...a87e0ac36g.jpg
http://www.mediafire.com/conv/3b9e08...c467c0e56g.jpg
با اجرای این خط فرمان ها اسکلت اصلی پروژه در پوشه ی www شما با نامی که شما مشخص کردید که من اون را Barnamenevis نامیدم ساخته می شود. دستور webapp یک دستور رزرو شده است و می توانید از دستورات دیگری هم در این جا استفاده کنید که فعلا صلاح نیست توضیح داده بشند ، در مراحل بعد وقتی به اونها احساس نیاز کنیم خودشون آشکار می شند.
خوب با وارد کردن این خط در url مرورگر خود نتیجه را می بینیم.که اصل کارمون از اینجا شروع خواهد شد.
تا یادم نرفته دوستان عزیز انتخاب یک IDE خوب خودش واقعا می تونه کمکتون کنه من از PHPStorm استفاده می کنم که از Yii Framework پشتیبانی می کنه و در کامل کردن دستورات بسیار به شما کمک خواهد کرد که یکسری تنظیمات اولیه باید انجام بگیره که در مراحل بعد قبل از شروع کار و توضیح دستورات آن را براتون بازگو خواهم کرد.
http://www.mediafire.com/conv/def7d7...4125058d6g.jpg
موفق و سربلند باشید
پایان قسمت دوم
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
خوب در قسمت قبلی ما یک پروژه با نام barnamenevis در پوشه ی www ساختیم اما هنوز اجراش کردیم، به دلیل اینکه باید IDE خودمون را قبل از هر کاری کانفیگ کنیم، دوستان من از PHPStorm استفاده می کنم، شما می تونید نسخه 30 روزه این نرم افزار را از سایت http://www.jetbrains.com/phpstorm/ با حجم 93MB دانلود کنید، این IDE به شما این امکان رو خواهد داد که موقع کد نویسی code complemition به طور اتوماتیک انجام بگیرند و به روند کد نویسی شما سرعت ببخشه، من حدود 30 پروژه با این IDE نوشتم و واقعا از اون راضی هستم نسبت به IDE های دیگه. اما برای سهولت کار من صحبت را کم می کنم و روال کار را با عکس بیشتر بهتون نشون میدم، مشا باید یکسری تنظیمات را در PHPStorm انجام دهید تا IDE شما این فریم ورک قوی را درک کنه و بتونه کمکتون کنه، مرحله به مرحله با عکس ها پیش برید، البته من فرض می گیرم شما نرم افزار را دانلود کردید و نصب هم کردید.
http://www.mediafire.com/conv/ca1c7f...c31e0f346g.jpg
http://www.mediafire.com/conv/1001a5...8a82ae486g.jpg
با باز شدن پروژه شما یا باید alt+ctrl+s را بشارید یا روی آیکن آچار که مشخص شده کلیک کنید تا پنجره تنظیمات برای شما ظاهر شود، بعد در سمت چپ نرم افزار در بخش Project setting گزینه ی Directories را انتخاب و در بخش باز شده در قسمت 1 در لیست درختی باز شده root را انتخاب و روی دکمه بنفش رنگ که نام آن Resource Root است کلیک کنید با انجام این کار قسمت 2 به این شکل در خواهد آمد.
http://www.mediafire.com/conv/63f147...4610a5196g.jpg
در مرحله بعد با انتخاب PHP در سمت چپ در همین بخش، با کلیک روی آیکن + این مسیر را به آن اضافه کنید که در شکل گویاست
http://www.mediafire.com/conv/8b219f...7028c80c6g.jpg
در مرحله بعدی در سمت چپ باید در بخش IDE Setting دنبال گزینه ی File Types باشد و با انتخا آن پنجر ای به این شکل برای شما باز می شود ، این مقدار را در قسمت مشخص شده وارد کنید
;yiiilte.php
http://www.mediafire.com/conv/62b37b...403e37996g.jpg
و ok را کلیک کنید، کار به اتمام رسید و حالا گزینه این به این شکل در سمت چپ IDE شما ظاهر می گردد، و گویای این هست که IDE تمام کدهای yii را شناخته است.
http://www.mediafire.com/conv/39719e...f6fedf1b6g.jpg
دوستان عکس ها را دخیره کنید تا واضحتر باشند، راهی به ذهنم نرسید جز عکس چون واقعا گویاست، من قصد پر رکورد کلیپ داشتم که به دلیل نداشتن ترافیک نتونستم. ببخشید:افسرده:
موفق و سربلند باشد
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
خوب برگردیم به باقی مانده مباحث شی گرایی که خیلی در yii به اون بر خواهیم خورد.
همینطور که می دونید ما مفهومی را در مباحث شی گرایی داریم به نام ارث بری، به اینصورت که اگر یک کلاس بیس داشته باشیم می توانیم از اون ارث بگیریم مثلا کلاسی به نام animal که کلاس حیوانات هست و ما می توانیم از این کلاس ارث بری کنیم، به مثال با هم دیگه توجه کنیم:
class Animal{
protected function move(){ }
}
class Cat extends Animal{
}
خوب ما در واقع کلاس cat که گربه هست رو از کلاس حیوانات مشتق کردیم و خصوصیات آن را به ارث بردیم، یادتون باشه دوستان برای صدا کردن متد یا properties از کلاس پدر باید از parent استفاده کنیم
class Animal{
protected function move(){ }
}
class Cat extends Animal{
public function see(){
parent::move();
}
}
خوب مفهمی در اینجا شکل میگیره به نام overide کردن، در تعریف اینطور بگم که:
اگر کلاس پدر ما متدی داشته باشد که کلاس فرزند هم به همان نام آن را بخواهد به طور دیگر بازنویسی کند به این حالت می گوییم overide کردن، به طور ساده تر متدی هم نام در کلاس پدر و فرزند که هرکدام آنجوری که خواسته ان آن را پیاده کردند، دوستان این مفهوم را زیاد در yii خواهیم داشت ما معمولا در yii کلاس ها را extends می کنیم و توابع کلاس پدر را overide می کنیم و آنطوری نیاز ماست آن را پیاده می کینم.
class Father
{
protected function see()
{
echo 'Father Class';
}
}
class Child extends Father
{
public function see()
{
echo 'Child Class';
}
}
$n=new Child();
$n->see(); // Child Class
در این مثال کلاس فرزند متد see کلاس پدر را overideکرده است و موقع صدا زدن ما با چاپ Class Child مواجه هستیم، اگر بخواهیم متد see کلاس پدر را صدا کنیم از دستور parent::see(); در کلاس فرزند استفاده می کنیم. تا با چاپ Class Father مواجه شویم. این امر در مورد خصوصیات کلاس هم مشهود است
نمونه کلاس در yii در مثال زیر وجود دارد که کلاس Controller از کلاس Ccontroller مشتق شده و خصوصیات خصوصیاتی را مشتق کرده است.
class Controller extends CController
{
public $defaultAction='hello';
}
البته بعد ها که با yii کار کنید می بینید که این خصوصیت جز کلاس Ccontroller که کلاس پدر است می باشد.
واقعا نمی دونم دوستان باید در مورد کلاس های چون کلاس های abstract یا غیره بحث کنم یا نه برای همین من حوصله شما را سر نمی برم ، اگر دوست داشتید بگید تا براتون توضیحش بدم، البته دوستان مطمئنا با این کلاس ها آشنا هستند و نیازی به توضیح من نیست.
چند نکته در کار با yii یادتون باشه دوستان که قبل از ورود به یادگیری به نظر من بهتره درک بشه:
1- در yii مرتبا شما باید از کلاس های بیس مشتق بگیرید و حالا یا متد یا خصوصیتی را overide کنید، یا شاید هم اصلا لزومی نداشته باشید
2- همونطور که گفتم کلاس های بیس با یک کاراکتر C در اون نامشان شروع می شوند
3- Yii یک فریم ورک بر مبنای MVC می باشد، پس درک MVC واقعا مهم هستش
4- تنظیمات در yii به وسیله ی ارسال آرایه هایی به توابع یا... انجام میگیرد مثلا در این مسیر protected/config/main.phpشما تنظیمات اصلی و پایه ای پروژه را در غالب یک آرایه ی بزرگ ارسال می کنید، پس درک آرایه ها و اندیس ها بسیار مهم هستند.
5- مفهوم unit test ها را واقعا رعایت کنید و به کار ببندید، که دوستمون مهندس نریمان زحمت ترجمه بخش کتابش رو کشیدند. مرسی ازشون
6- هر چیزی رو در IDE مورد نظر تایپ کردید و در لیست باز شونده براتون ظاهر نکرد اصلا دیگه ادامه ندید چون یه جای کار میلنگه.
7- و من تضمین می کنم اگر یک تیم نرم افزاری باشیم در یک گستره جغرافیای بهترین گزینه yii می باشد به دلیل وجودmodules در این فریم ورک.
موفق و پیروز باشید. دوستان منتظر نظرات شما هستم.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
با سلام خدمت همه دوستان
در مراحل قبل دیدیم که چطور یک پروژه ساده را ساخته و ویرایش گر خود را جهت Develope آماده سازیم، جناب آقای مهندس رسول عشیری، و جناب آقای مهندس نریمان توضیحات لازم رو در مورد مقدمات کاری و همچنین چینش فولدر ها و نحوه پاس دادن درخواست کاربر به Controller و... رو خدمت شما توضیح داده اند، در تکمیل صحبت های این دوستان چند نکته به ذهنم رسید براتون می نویسمش:
یادتون باشه دوستان وقتی یک کاربر درخواستی را صادر می کند ، Route آن درخواست را به کنترل مورد نظر ارجاع می دهد، و باز بسته به درخواست کنش مورد نظر اکشن آن کنترلر صدا زده می شود و در کنش نیز اگر قرار باشد ورودی از کاربر داشته باشم عملیات مورد نظر را انجام داده و نهایتا خروجی را در با متد render در کنترلر در صفحه چاپ می کنیم، چند نکته حائز اهمیت می باشد:
به هیج وجه وظیفه های هر بخش را به جای دیگر منتقل نکنید، شما باید مدلMVC را رعایت کنید، شما نباید دستوراتHTML در مدل که مربوط به تراکنش های بانک داده می باشد وارد کنید
یادتان باشد اگر شما تنظیمات اولیه پروژه را تغییر ندهید به طور اتوماتیک هر کلاسی که در پوشه protected/models و protected/components وجود دارد ، را می توانید بدون import کردن توسط توابع yiiمورد دسترسی قرار دهید .
این تنظیمات را در این خط از کانفیگ پروژه خواهید دید:
Protected/config/main.php
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
),
کاراکتر* به معنی این هست که تمام کلاس های داخل این دایرکتوری قابل استفاده باشند، یادتون باشه این کلاس ها تا وقتی صداشون نزنید یا شی از اون ها نسازید برای include نخواهند شد، که همان مکانیزم autoload می باشد، پس باز یک نکته داریم ،"یادتون باشه باید اسم فایل php با نام کلاس یکسان باشه".
برای نمونه بیاد به چند بخش نگاهی بیاندازیم در فایلprotected/controllers/SiteController.php همین طور که می بینیم کلاس SiteController از کلاس Controller مشتق شده دقیقه میشه این خط:
class SiteController extends Controller
{
}
اما ما میدونیم که این کلاس باید از کلاس CController مشتق میشد، پس چرا از کلاس Controller مشتق شده، اصلا کدام فایل include شده که کلاسCintroller در داخل آن بوده؟
سادست یا در کرسر را روی Controller قرار دهید و در ویرایش گر چه PHPStorm چه netb… کلیدCtrl+B را بفشارید ما به مکانی که کلاس Controller تعریف شده است انتقال پیدا می کنیم، یا کافیست به پوشه protected/components/ برویم و فایل Controller را باز کنیم ، مشاهد می کنیم ، که کلاسController از کلاس Ccontroller مشتق شده است و به دلیل import شدن تمام فایل های داخل پوشه components در فایل کانفیگmain.php این کلاس قابل دسترس می باشد.
خیلی جالبه نه؟
به عنوان نکته بعدی باید بگم که شما در model دو نوع کلاس دارید اگر ما بخواهیم داده های ورودی از کاربر را به دیتابیس منتقل کنیم یا اصلا کار به بانک اطلاعاتی داریم، باید از کلاس CActiveRecord استفاده کنیم در غیر این صورت برای داد های استاتیکی که از کاربر می گیریم نیاز به مشتق شدن از کلاسCForm را داریم: پس این چند تا از کلاس ها را مهمند و نام کلاس پدر آنها تا الان میشند این موارد:
Controller extends CController
Form extends CformModel* برای کار با داده ای استاتیک
extends CactiveRecord * برای کار با بانک داده ها
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
سلام خدمت دوستان گرامی
دوتا نکته به ذهنم رسید، شاید به دردتون بخوره:
اگر سوال خاصی در مورد این فریم ورک دارید به این لینک یه سری بزنید، فارسی زبان ها در این فروم هستند:
http://www.yiiframework.com/forum/in...um/41-persian/
دقت کنید که برای لود ماژول های پروژه آنها را در پوشه ی protected/modulas قرار بدید و در فایل کانفیگ پروژه آنها را فقط تنطیم کنید تا لود شوند، به روش های دسترسی توسط URL هم توجه کنید.
در ضمن اگر کسی از دوستان علاقه مند به آموزش در این بخش هستند می توانند این بخش را ادامه بدند تا ما هم از بیانات استفاده کنیم.
ممنون
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
آموزش بسیار عالی بوده تا اینجا ممنون. یه سوال من فریم ورک رو بهش معرفی کردم میشناسه تو تایپ کردن ولی عکسی که گذاشتید نه . یعنی بعد اینکه Yii::app()-> میزنم چیزی نمیاد.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
نقل قول:
نوشته شده توسط
tux-world
آموزش بسیار عالی بوده تا اینجا ممنون. یه سوال من فریم ورک رو بهش معرفی کردم میشناسه تو تایپ کردن ولی عکسی که گذاشتید نه . یعنی بعد اینکه Yii::app()-> میزنم چیزی نمیاد.
سلام دوست عزیز
از چه ادیتوری استفاده می کنید؟ اگر از PHP Storm استفاده می کنید مراحل رو یکبار دیگر تکرار کنید حتما یکی از مراحل رو انجام نمی دید.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
سلام. ادامه نميدين؟ پرنت روهم توضيح بديد و تفاوت ديس با سلف. ممنون
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
نقل قول:
نوشته شده توسط
tux-world
سلام. ادامه نميدين؟ پرنت روهم توضيح بديد و تفاوت ديس با سلف. ممنون
با سلام خدمت دوستان
در توضیح برای حل مشکل دوستمون، باید اینطور بگم که: ببینید، در مفاهیم شی گرایی ما مفهموم ارث بری را داریم، که معمولا یک کلاس پدر و کلاس دیگر فرزند نامیده می شود، کلاس پدر دارای رفتار ها و خصوصیاتی می باشد که کلاس فرزند اگر از روی کلاس پدر مشتق شود یا به عبارتی ارث ببرد علاوه بر مشخصات و خصوصیاتی که قابل دسترس از کلاس پدر هستند، می تواند خود نیز خصوصیات و مشخصات منحصر به فردی داشته باشد. به این مثال توجه کنید:
class Father
{
private $_name;
var $age;
static $eyeColor
public function pubSayHello()
{
}
protected function proSayHello()
{
}
private function priSayHello()
{
}
final public function fPubSayHello()
{
}
public static function pStaticSayHello()
{
}
}
class Child
{
}
ما در این مثال می خواهیم بپردازیم به توضیح دادن تمامی حالات ممکنه!!!
همینطور که می بینیم ما دو کلاس به نام Father و Child داریم، کلاس پدر دارای انواع حالات از توابعی است که ممکن است در مفایم شی گرایی معنی داشته باشد را دارا می باشد. در نوع دسترسی ها به توابع کلاس پدر همینطور که می بینیم از private، public ، protected استفاده شده است، همینطور که دوستان در جریان هستند توابعی که private هستند، خارج از این کلاس(کلاس پدر) قابل دسترس نیست، توابعی که دسترسی public دازند همانطور که از اسمش هم مشخصه در هر جا چه کلاس مشتق شود چه از روی آن نمونه ای ساخته شود قابل دسترس می باشد، و نوع توابعی که protected هستند این خاصیت را دارا می باشند که اگر از این کلاس مشتقی(ارث ببریم) بگیریم، فقط کلاس که از این کلاس ارث برده است قابلیت دسرسی به توابع این کلاس را دارا می باشد، حتی اگر از روی این کلاس نمونه ای ساخته شود این توابع قابل دسترسی نمی باشند و فقط کلاسی که ارثبری انجام داده قادر به این کار می باشد.
حالا برویم سراغ دو کلمه به نامfinal و static:
همانطور که می دونید دوستان اگر کلاس دارای تابعی باشد که از نوع static باشد دیگر نیازی به ساختن نمونه از روی این کلاس نیست تا به آن تابع دسترسی داشته باشم یعنی نیار نیست بنویسم:
$f=new Father();
و بعد تابع رو صدا کنیم، یعنی:
$f->pStaticSayHello();
بلکه می تواینم به این سادگی آن تابع رو صدا کنیم:
Father::pStaticSayHello();
برای توضیح مورد final اینطور بگم که دوستان اگر تابعی در کلاس پدر داشته باشم و بخواهیم به همان نام آن تابع را در کلاس فرزند بازنویسی(override) کنیم، به سادگی این کار امکان پذیر می باشد اگر بخوایم از این کار جلوگیری کنیم آن تابع را final تعریف می کنیم و نمی گذرایم که کلاس فرزند تابع کلاس پدر را باز نویسی کند. که همان مفهم چند ریختی. polymorphism
خوب میرسیم به خصوصیات این کلاس که$nameو eyeColor و $age که با ارث بری می توانید ببینیم که کدام یک در کلاس فرزند قابل دسترس می باشد.
در تاپیک بعدی می ریم سراغ اصل موضوع.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
قبل از شروع مفاهیمی مثلparent و self و $this چند نکته رو متذکر بشیم:
بیاید پیش خودمون قرار داده هایی داشته باشم:
اول اینکه دوستان مد نظر داشته باشید ما حالت های متفاوتی از توابع رو در کلاس پدر باز هم می توان ساخت که کاملا مشخصه و نیازی به توضیح دان نیست
دوم اینکه بیاد قبل از اینکه از کلاس پدر مشتقی بگیریم اول از روی آن نمونه بسازیم و حرف هایی که در تاپیک قبل زدیم رو اثبات کنیم به مثل و عکس ها توجه کنید.
http://www.mediafire.com/conv/b46cac...71fcd55e6g.jpg
همینطور که میبنید وقتی از کلاس نمونه ای ساخته می شود، توابع priSayHello و proSayHello قابل دسترس نیست که دلیل private و protected بودن این توابع است.
http://www.mediafire.com/conv/cb7f68...4634b6706g.jpg
در این مثال هم همینطور که می بینیم از کلاس نمونه ای نساختیم و این مشخصات و خصوصیات قابل درسترس می باشد چون این موارد خاصیت static بودن را دارند.
خوب برسیم به اصل موضوع و توضیح اولین مورد یعنی کلمه کلیدی this$ :
اینطور بگم که دوستان اگر در scope یک کلاس باشم و بخواهیم به خصوصیات و رفتار های آن کلاس در خود کلاس دسترسی داشته باشم از کلمه کلیدی $this استفاده می کنیم. به مثال عکسی توجه کنید:
http://www.mediafire.com/conv/5dc940...14452a706g.jpg
حالا اگر بخواهیم به توابع یا خصوصیات static دسترسی داشته باشم از self استفاده می کنیم، که در خود کلاس یک جورایی بی معنی می شه و در ارث بری مفهموم پیدا می کنید، که در جلو مثال رو خواهیم دید.
حالا بیاید از روی کلاس Father مشتق بگیریم به مثال توجه کنید:
http://www.mediafire.com/conv/b07795...3dda2a206g.jpg
من می خواهم در کلاس فرزند یک تابع ساده public تعریف کنم و ببینیم که چطور میشه توابع و خصوصیات کلاس پدر در کلاس فرزند دسترسی داشته باشم به مثال توجه کنید:.
http://www.mediafire.com/conv/55c5f5...d884687d6g.jpg
همینطور که می بینیم برای دسترسی به توابع داخل کلاس پدر در کلاس فرزند از کلمه کلیدی parent استفاده می کنیم تا به آن ها دسترسی داشته باشیم.
حالا اگر از this$ استفاده کنیم هم به توایع و مشخصات کلاس فرزند دسترسی داریم هم کلاس پدر. خوب تفاوت در کجاست؟
در تاپیک بعد باز هم بیشتر توضیح خواهم داد.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
با سلام خدمت دوستان عزیز
چند وقتی بود می خواستم یک کتابچه ی کوچک در مورد PHP و Yii Framework بنویسم، بخش هایی از این کتابچه آمدست براتون آپلود می کنم، هنوز بخش دوم و سوم خیلی کار داره، اگر کسی از دوستان دوست داشت همکاری کنه باهم تمومش کنیم خبر بده وگرنه لطفا نظرتون را در موردش بگید که اگر مناسب نیست دیگه ادامه اش ندم، البته هنوز خیلی جای کار داره و فقط توضیحات بسیار ساده و تقریبا تکراری را گفتم، شاید به درد دوستانی که تازه دارن PHP یاد میگیرند بخوره:لبخندساده:
ممنون اگر نظراتتون را بهم بگید:لبخندساده:
اینم لینک دانلود با حجم 3/80 مگابایت
http://www.mediafire.com/download/2w...iFramework.rar
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
دوست عزيز تشكر خيلي عالي توضيح داديد براي ما تازه كارها خيلي گيرا بود.
اميدوارم بازم آموزشهاتون ادامه داشته باشه.
نحوه ارسال و دريافت اطلاعات رو به صورت يه پروژه عملي ميشه بزاريد؟
يه چيز ساده . كه چطوري ارسال كنيم اطلاعات رو به ديتا بيس و چطوري دريافت كنيم
سپاس از شما
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
با سلام خدمت دوستان و طرفداران YiiFramework
من چند وقتی هست دارم با یکی از دوستان همکاری می کنم برای آموزش Yii 2، البته می دونم که هستند دوستانی که این کار را شروع کردند، اما بدلیل اینکه نتونستم آموزش قبلی خود را تکمیل کنم و به جایی برسونم احساس بدهکاری بهم دست داده به همین خاطر در این سایت شروع به تکمیل بحث ها کردم، هرچند یکم اولش تکراری و آماتور شده اما قصد دارم واقعا ادامش بدم تا به جایی برسم و اگر کسی دوست داره کمک کنه یا قصد همکاری داره خبرمون کنه، البته واقعا جا داره از دوستان و برنامه نویسانی که برای تهیه فیلم های آموزشی تلاش کردند و در اختیار دوستاران Yii قرار دادند تشکر کنم، عزیزانی همچون جناب محمد مصطفی شهرکی و....
یک دلیل اینکه نتونستم مطالب را در آموزش قبل تکمیل کنم بحث سربازی بود که شخصا درگیرش بودم و واقعا جا و مکان برام مبهم بود که خدا رو شکر جام ثابت شده و الان مرکز تحقیقات کامپیوتری نور مشغول هستم، دومین دلیل هم نامشخص بودن تاریخ انتشار Yii 2 بود که نمیذاشت تمرکز کنم.
با تشکر از دوستان.
و ممنون از تمام دوستانی که دارند زحمت می کشند، خدا خیرتون بده!
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
سلام
من مشکل دارم تو دستورات cmd همون گام اول خطا رو تو عکس زیر گذاشتم
http://i59.tinypic.com/znn15h.jpg
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
باید مسیر فایل اجرایی PHP و مسیر پوشه framework از محل کپی کردن خود Yii رو روی سیستمتون، به Path ویندوز اضافه کنید و بعد با دستور yiic webapp helloworld پروژه موردنظرتون رو ایجاد کنید.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
ممنون از پاسخگویی سریعتون من مسیردهی ها رو درست رفتم تو عکس هم که گذاشتم اون دو تا گزینه رو که مشخص کردند برای من هم pass شده اما بازم مشکل رو دارم :متفکر:
http://oi60.tinypic.com/29lcpdi.jpg
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
ببینید، اون خطا داره میگه فایل php.exe رو نتونسته پیدا کنه و این یعنی توی مسیرهای ویندوز نیست و ارتباطی به Yii نداره. باید Path رو چک کنید. اگه از Wamp استفاده میکنید، ببینید توی پوشه bin مسیر فایل اجرایی php.exe چیه و دقیقاً همون رو به Path اضافه کنید.
نقل قول: آموزش مباحث شی گرایی فریم ورک Yii
سلام، اگر مشکل حل نشده است، این قسمت از همین تاپیک را مطالعه بفرمایید