
نوشته شده توسط : tahlildadeh
MVC3 آخرین تکنولوژی مایکروسافت در زمینه تولید صفحات وب (تا این لحظه ، یعنی مارچ 2011) می باشد که کم کم جایگزین روش قبلی تولید صفحات وب (Web Forms) می شود و جالب اینجاست که به شدت از سوی مایکروسافت تبلیغ می شود و منابع آن به سرعت انتشار می یابند. این تکنولوژی که در حال حاضر نسخه 3 آن منتشر شده است دارای مزیتهای زیر نسبت به تکنولوژی قبلی (Web Forms) می باشد(در واقع موارد ذیل مشکلات وب فرمها هستند).
تکنولوژی MVC تمام مشکلات فوق را حل می کند و مزایایی نیز دارد از جمله :
من در ابتدا تصمیم داشتم که در 5 الی 6 مقاله کل مبحث را خلاصه کنم ولی ترجیح دادم تا به جای آن ، بصورت گام به گام یک پروژه MVC را شروع کنم و در طی آن مطالب جدید را بیان کنم. اما قبل از شروع : - نصب برنامه :MVC2 در ویژال استودیو 2010 نگارش Ultimate از پیش نصب شده است ولی اگر بدنبال نصب MVC3 هستید ، از آدرس http://www.microsoft.com/web ابزار WebMatrix را نصب کنید. این ابزار پس از نصب ، پنجره Web Platform Installer 3 را در اختیار شما می گذارد که نه تنها می توانید MVC3 را نصب کنید ، بلکه می توانید برنامه های مفید دیگه ، مثل تنظیمات توصیه شده مایکروسافت برای IIS7 یا موتور (engine) بسیاری از CMS های معروف مثل DotNetNuke ، Drupal , Joomla , Umbarco را نیز نصب کنید (یکی به عجایب هفت گانه دنیا اضافه شده !!!) - مبانی MVC:من چون نمی خواهم خیلی وارد مباحث تئوریک شوم بصورت خلاصه توضیح می دهم و زمانی که پروژه را شروع کردیم ، خودتان این مفاهیم را بهتر متوجه می شوید . برای شروع از MVC2 آغاز می کنیم و پس از طرح مباحث اصلی MVC3 را نیز شرح می دهم . در MVC سه جزء اصلی وجود دارد :
Model کلاسهایی برای ارتباط با دیتابیس و استفاده از تکنیک هایی مثل Linq و Entity Framework هستند Controller قلب MVC است و کنترل کننده درخواستهای کاربر است ، کلاسهایی هستند که در آنها ، متدهای (اکشن های) مختلف جهت پاسخگویی به درخواست کاربر و انتخاب Model و یا View (خروجی) مناسب ، وجود دارد. View رابط کاربری است یعنی آنچه کاربر باید ببیند را در آن نمایش می دهیم. - ایجاد پروژه جدید : برای ایجاد پروژه جدید مطابق معمول از منوی File ویژال استودیو ، گزینه New و سپس Project را انتخاب کنید و سپس یکی از قالبهای زیر را انتخاب کنید :
(البته اگر MVC3 را نصب کرده باشید ، MVC3 را هم می بینید) تفاوت دو قالب فوق در این است که اولی شامل یک سری الگوهای آماده ، مثل Membership دات نت فریم ورک ، مراجع Jquery ، کلاسهای CSS از پیش ساخته شده است ولی دومی (Empty) اینها را ندارد و خودتان باید آنها را اضافه کنید برای شروع ، قالب اول را انتخاب کنید، نام و مسیر مناسبی برای آن انتخاب کنید و پروژه را ایجاد نمایید ، از شما سوال می شود که آیا تمایلی به ایجاد واحد تست دارید یا خیر (که من برای شروع خیر را انتخاب می کنم، توی شکل زیر Yes انتخاب شده !) :
برای شروع کار فایل HomeController.cs از فولدر Controllers را باز کنید . کدهای زیر را در آن می بینید : namespace _30Sharp_com_MVC.Controllers
{ public class HomeController : Controller { [HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } public ActionResult About() { return View(); } } } } نکاتی که از کد فوق برداشت می کنیم : هر فایل از نوع Controller با کلمه دلخواهی شروع می شود و بدنبال آن کلمه Controller می آید و این نام دلخواه در URL سایت تاثیر می گذارد . قالب URL در MVC به فرم زیر است : Web site address/Controller/Action
اکشن / کنترلر / آدرس اصلی سایت برای مثال برنامه را اجرا کنید ، روی لینک About کلیک کنید و URL صفحه را ببینید ، چیزی شبیه این می بینید (به جز شماره پورت که متفاوت است) http://localhost:34256/Home/About
به متدها و رخدادهای صفحه در ام وی سی ، Action می گویند و در هر کنترلر می توانید چندین اکشن بیاورید و یا Overload کنید خروجی اکشن ها ، به صورت پیش فرض ActionResult است ولی می تواند هر نوع دیگری باشد (مثلا string) . در یک کنترلر شما ممکن است چندین اکشن داشت که برای هر اکشن یک View ایجاد می کنید و در آن ، مشخص می کنید که کاربر چه خروجی را باید مشاهده کند . برای مثال زیر اکشن About ، من اکشن دیگری به نام Contact ایجاد می کنم و در آن اطلاعات خود را در Message ذخیره می کنم : public ActionResult Contact()
{ ViewData["Message"] = "My Email : Amir.Madadi@hotmail.com and My Contact is 0422760153"; return View(); }
حال باید برای این اکشن یک View ساخت تا مشخص کنیم کاربر چه چیزی را ببیند. برای این کار روی اکشن کلیک راست می کنیم و گزینه Add View را انتخاب می کنیم :
سپس پنجره زیر ظاهر می شود :
در مورد امکانات این پنجره بعدا صحبت می کنیم ، فعلا پیش فرضها را قبول کنید و روی Add کلیک کنید . خواهید دید که فایلی به نام Contact.aspx در فولدر View ایجاد می شود . در تگ Asp:Contect id="Content2" خط زیر را اضافه کنید : <h2><%: ViewData["Message"] %>h2>
کد صفحه Contact.aspx شما باید شبیه این باشد :
تدریس MVC http://localhost:34256/home/contact
اگر متن تایپ شده را در صفحه می بینید، به خود تبریک بگویید ، چون اولین صفحه وب خود را با تکنولوژی MVC ساخته اید. قبل از پایان ، نگاهی به ساب فولدرهای View بیندازید ، خواهید دید که به ازای هر Controller یک فولدر وجود دارد که در آن View های مربوطه نگهداری می شوند (در حال حاضر باید Account ، Home و Shared را ببینید) که فولدر Shared برای ذخیره کردن اجزای مشترک مثل Master Page ها استفاده می شود. خب تا اینجای کار یک پروژه جدید MVC ایجاد کردیم ، کمی در مورد ساختار MVC صحبت کردیم و یک View جدید به پروژه اضافه کردیم . در مقاله بعدی صفحاتی با کارایی بیشتر ایجاد می کنیم، تا آن موقع مروری بر دانسته های خود درباره Linq to SQL داشته باشید ، چرا که بزودی از آن در صفحات Model استفاده می کنیم
:: بازدید از این مطلب : 430 |
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
نوشته شده توسط : tahlildadeh
آموزش php - قسمت اول - نصب Xamppآموزش PHPبرای شروع کار با php نیاز به نصب مفسر اون داریم که ما پکیج Xampp رو برای کارمون انتخاب کردیم. مراحل نصب رو باید به صورت زیر دنبال کنیم:
مسیر نصب رو مشخص کنید
در صورتی که میخواهید Apache و MySQL به عنوان سرویس های ویندوز نصب بشند گزینه های Install Apache as Service و Install MySQL as Service رو تیک بزنید! انتخاب این گزینه ها اختیاریه. تنها نکته ای که هست اینه که در صورتیکه IIS رو سیستم تون نصبه و Apache رو نصب کنید باید حتما پورت IIS یا Apache رو تغییر بدید وگرنه Apache پیغام خطای Port Busy بهتون میده! بعد روش تغییر پروت IIS و Apache رو میبینیم. خوب تا اینجا کار تقریبا تمومه فقط باید دکمه Install رو بزنید.
اینم کنترل پنل Xampp هستش که با اون میتونید Apache و MySQL رو Start یا Stop کنید! یادتون باشه اگر تیک Install as Service رو نزده باشید باید هر بار که می خواهید روی وب سایتتون کار کنید Apache و MySQL فعال باشند یعنی باید دکمه Start کنارشون رو کلیک کنید (Runningرو کنار Apache و MySQL نمایش بده)
حالا مرورگرتون را باز کنید و در آدرس بار مرورگر تایپ کنید localhost یا 127.0.0.1 هر کدومشو رو که بنویسید فرقی نمی کنه! اگر همه چیز خوب پیش رفته باشه باید صفحه زیر رو ببینید که باید تویه این صفحه زبان صفحات Xampp رو انتخاب کنید پس روی English کلیک کنید!
حالا باید صفحه زیر براتون نمایش داده بشه! اگه این صفحه نمایش داده شد یعنی همه چی خوب پیش رفته اگه که نه تو بخش انجمن ها مطرح کنید تا بهتون کمک کنیم مشکل حل شه!
:: بازدید از این مطلب : 171 |
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
نوشته شده توسط : tahlildadeh
مشكل نمايش منوهاي ASP.NET در IE 8
امروز متوجه شدم كه كنترل استاندارد منو ASP.NET در مرورگر Internet Explorer 8 بدرستي نمايش داده نمي شود مشكل به اين صورت است كه زير منوها (Dynamic Items) بصورت سفيد و خالي نمايش داده مي شوند. به جناب گوگل متوسل شدم و با كمي جستجو راه حل مشكل رو پيدا كردم.براي رفع اين مسئله بايستي حالت z-index مربوط به Dynamic menu style را برابر با يك عدد بزرگ قرار دهيم،بصورت ذيل:
DynamicMenuStyle BackColor="#B5C7DE" CssClass="IE8Fix"
.IE8Fix
{ z-index: 1000; }
:: بازدید از این مطلب : 264 |
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
نوشته شده توسط : tahlildadeh
مقدمه :
اين دستور كه دستوري مستقل نيست و حتما بايد با اجزايي بكار رود جهت ساخت پرس و جو بر روي بانك اطلاعاتي بكار ميرود و ركوردهايي كه با شرايط اين دستور همخوان باشد به عنوان نتيجه پرس و جو برميگرداند . چهار كلمه كليدي وجود دارند كه بخشهاي ارزشمند اين دستور را تشكيل ميدهند :
1-select شكل كلي دستور : Select [*|distinct column1, column2,…] مثال : Select * from customers اين دستور تمام ركوردهاي جدول customers را برميگرداند. كه نتيجه 91 سطر از اطلاعات اين جدول خواهد بود
حال اگر شرط Country ='uk' اضافه كنيم ، فقط اطلاعات مشتريان انگليس جواب خواهند بود كه به 7 سطر تقليل مييابد. select * from customers
حال select City,Country from customers فقط ستونهاي نام شهر (city) و نام كشور (Country) را بر گردانده و بر اساس نام شهر مرتب ميكند. دستور بالا با دستور پايين هردو يك جواب را ميدهند :
كه 91 سطر بازگردانده خواهد شد . در نتيجه پرس و جو تعدادي سطر تكراري وجود دارد مانند شهر London كه اگر از كلمه Distinct در Select استفاده كنيم اين سطرهاي تكراري حذف خواهد شد .
و جواب 69 سطر خواهد بود.
استفاده از توابع در Select 1- Count : تعداد سطرهاي بازگردانده شده توسط select را ميشمارد.
Select Count(*) from Customers
where Country ='uk'
در اصل تعداد مشترياني را ميشمارد كه در كشور انگليس هستند. كه عدد 7 جواب است.
مجموع يك فيلد عددي را برميگرداند.
مجموع فيلد Quantity را براي فيلدهايي كه شماره محصول آنها ( Productid) برابر 11 است را محاسبه ميكند
در دستور select ميتوان از اسم مستعار استفاده كرد ، يعني نام جديدي را براي يك ستون در نظر گرفت به عنوان مثال select قبل را به شكل زير بكار برد :
كه Sum_QTY يك اسم مستعار براي مجموع است. استفاده از كلمه كليديas اختياري است.
در دستور select هرگاه اسم فيلدي اسم خاص باشد و يا فاصله بين اسم باشد مثل Order Details كه فاصله بين اسم جدول است حتماُ از علامت براكت [] ميبايست استفاده كرد.
استفاده از group by :
هنگامي كه از توابع count و Sum به همراه يك فيلد ديگر در دستور select استفاده ميشود از group by استفاده ميكنيم .
به عنوان مثال دستور زير جمع مقادير فيلد Quantity را براي هر شماره محصول محاسبه ميكند .
كه نتيجه مانند زير خواهد بود : productid sum_qty ---------------------- 61 603 3 328 32 297 6 301 41 981 64 740 9 95 12 344
در صورتيكه دستور ordr by 1 بعد از group by استفاده كنيم نتيجه بر اساس كد محصول مرتب خواهد شد.
آموزش SQL SERVER دستور where مي تواند خود شامل يك دستور select باشد : select * from Products
تنها نكته اي كه مي بايست توجه كرد اين است كه نام فيلدي كه در شرط آورده مي شود حتما در دستور select آورده شود, به عبارت ديگر select درون شرط تنها يك ستون را مي بايست برگرداند .
تمرين : با فرض اينكه دو جدول Products و order details داراي ستون (فيلد) يكسان ProductID هستند , يك دستور Select بنويسيد كه تمام فيلدهايي از Products را نشان دهد كه فيلد ProductID آن با ProductID جدول order details يكي باشد.؟
حل : Select pr.*
قابل به ذكر است كه بيش از 90% از كارهايي كه ما برروي جداول انجام مي دهيم با select و تركيبات آن انجام مي شود. لذا بدست آوردن تبحر در نوشتن select ها مي تواند شما را در تهيه برنامه ها ياري كند. تدریس SQL SERVER بيشترين و كمترين مقدار فيلد را در بانك اطلاعاتي بدست مي دهد. Select min (Quantity)
تعداد n سطر اول بانك اطلاعاتي را برمي گرداند. Select top 5 *
5 سطر اول بانك را برمي گرداند.
نكته 3 : در حالت بالا اگر مقدار سطر 5 و 6 يكي باشد فقط سطر 5 جواب خواهد بود براي گريز از اين حالت از شكل زير در اين دستور استفاده ميكنيم :
Select top n with ties *
From table
Select * from table1 into table2
اطلاعات table1 را به table2 كپي ميكند. البته table2 بايد از قبل وجود نداشته باشد.
اين دستور خود table2 را ميسازد. دستور select قويترين و كاربردي ترين دستور در sql است كه خود ماهها نيازمند تمرين و آموزش است . براي اطلاعات بيشتر به books online خود Sql Server مراجع كنيد.
براي حذف اطلاعات از يك بانك اطلاعاتي استفاده ميشود.
شكل كلي دستور :
مثال :
فرض كنيد جدول authors موجود باشد و فيلد كليد آن au_id باشد. براي حذف 10 سطر اول اين جدول از دستور زير استفاده مي كنيم :
براي اضافه كردن اطلاعات به يك جدول از اين دستور استفاده ميشود.
كه f1,f2 نام فيلدها و v1,v2 مقادير آنها ميباشد.
البته ميتوانيد مقادير را نتيجه يك select قرار داد. مثال :
مقدار 10 سطر اول را از table2 را در table1 درج ميكند. البته بايد تعداد فيلدها يكي باشد. در غير اينصورت از values استفاده كنيد. :: بازدید از این مطلب : 115 |
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
نوشته شده توسط : tahlildadeh
آموزش سئو-سئو-تگh1-موتور جستجوی گوگل-بهینه سازی سایت-بهینه سازی وب سایتکسی منکر این نیست که تگ h1 از اهمیت زیادی در سئو سایت برخوردار هست و تمام فعالان حوزه بهینه سازی سایت وجود تگ h1 را ضروری می دانند و تگ h1 این امکان رو به موتور های جستجو می دهد که بهتر محتوای سایت شما رو درک کنند. اما شما حتما این قانون رو شنیدید که باید توی هر صفحه فقط یک تگ h1 وجود داشته باشه. خوب این حرف تا حدودی درست هست ولی چنین قانونی صد رد صد هستش. می خواهید بدونید چرا ؟ پس این مقاله رو با دقت بخونید.
قانون استفاده از تنها یک تگ h1سال های سال است که گفته می شود که باید تنها از یک تگ h1 استفاده نمود . این مورد بار ها و بار ها هم توسط کسانی که با بهینه سازی سایت آشنا هستند در انجمن ها و سایت ها به کاربران تازه کار توصیه می شود. شرایطی که این قانون رو بوجود آورده :
خوب اگر این دو تا اصل رو در نظر بگیریم چون تگ h1 عدد یک داره پس یک بار و تگ h2 چون دو هست باید دوبار ولی می دونید که این طوری نیست و ما توی هر صفحه بیشتر از دوبار ممکنه از h2 استفاده کنیم. یک بار دیگه بیاید که شماره اول این شرط رو بخونیم “از اونجایی که هر صفحه می تونه فقط یک عنوان داشته باشه پس باید از یک تگ h1 استفاده نمود.” به نظر شما این قانون نسبی نیست ! بیشتر اوقات ما در صفحات اول سایت های پرتال مانند که صفحه به چند بخش تقسیم شده ما بیشتر از یک عنوان در صفحه داریم . منظور من عناوین اخبار نیست منظورم بخش ها یا همون Sections هست. اگر به طور مثال ما در اون بخش یه قسمت آخرین خبر ها رو داشته باشیم و در قسمت دیگه آخرین ارسال ها رو مطمئنا ذات صفحه ما دو قسمتی هست مگر اینکه ما نادیده بگیریم یا به خاطر این قانون خودمون رو به کوچه علی چپ راهنمایی کنیم ! نقض قانون استفاده از تنها یک تگ h1همون طور که می دونید من توی صفحه اول تات وب من از دو تا تگ h1 استفاده کردم. ولی خوب شما احتمالا تا الان با خودتون گفتید که همه اینایی که گفتی درست ولی از کجا که معلوم حرف تو درست باشه یه دنیا دارن می گن که نه ! در جواب باید بگم که استفاده از چند تا تگ h1 تا به حال چندین هزار بار از بخش پشتیبانی مدیران سایت گوگل پرسیده شده و در یک ویدئوی رسمی که در وبلاگ وب مستر سنترال گوگل هست آقای Matt Cutts که سرپرست این بخش جستجو هست دقیقا این جواب رو به صورت رسمی داده . به نظر شما اگر خود گوگل می گه مشکلی در استفاده از چند تا تگ h1 نیست آیا بقیه می تونن بگن گوگل غلط کرده ما از گوگل که موتور جستجو خود گوگله بیشتر می دونیم ؟!!!! البته این مورد رو دقت داشته باشید که طبق صحبت آقای Matt Cutts درسته می شه چند تا تگ h1 داشت ولی دیگه درست نیست کل صفحه رو پر کنیم از تگ h1 . مطمئنا هم اینکه از لحاظ ظاهری قشنگ نمی شه و هم اینکه درست نیست.به یاد داشته باشید در بهینه سازی سایت هیچ چیز صد در صد نیست و همه چیز نسبی هستش :: بازدید از این مطلب : 85 |
امتیاز مطلب : 11
|
تعداد امتیازدهندگان : 3
|
مجموع امتیاز : 3
نوشته شده توسط : tahlildadeh
آموزشگاه تحلیل داده برگزار کننده دوره های تخصصی SQL
تماس : 02188146330 - 02188146323 - 09123840871
دانلود کتب تخصصی برنامه نویسی در سایت رسمی آموزشگاه : www.tahlildadeh.com :: بازدید از این مطلب : 147 |
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
نوشته شده توسط : tahlildadeh
متدهای جادویی در PHPPHP شامل تعدادی از متدهاییست که با نام ” متدهای جادویی ” شناخته میشن.این متدها با دو زیر خط (Underline یا underscore) شروع میشن.این متدها در جاهای مختلف استفاده میشن و خیلی مفید هستن.در ادامه نگاهی میکنیم به متهای جدویی در PHP .
متد سازنده کلاس یا __construct() اگر با برنامه نویسی شیء گرا در PHP آشنا باشید حتمن با این متد کار کردید.این متد هنگامی که یک نمونه از یک کلاس ساخته میشه اجرا خواهد شد.مثال زیر رو در نظر بگیرید :
class Animal{
function __construct()
{
echo 'Animal';
}
}
$animal = new Animal();
// output : Animal
در کلاس Animal یک متد ایجاد کردیم با نام __construct() و در این متد رشته Animal رو نمایش دادیم. هنگامی که از کلاس Animal یک نمونه ایجاد میکنیم تابع __construct() اجرا میشه و رشته Animal در خروجی نمایش داده میشه. متد مخرب یا __destruct() این متد برعکی متد __construct عمل میکنه.یعنی هنگامی که کلاس میخواد از حافظه خارج بشه این متد اجرا میشه. مثال :
class DB{
…..
function __destruct()
{
$db->disconnect();
}
…..
}
$db = new DB();
unset($db);
در کلاس بالا هنگامی که تابع unset میخواد کلاس $animal رو از حافظه خارج کنه متد __destruct() اجرا میشه و ارتباط با دیتابیس قطع میشه. Overloading در PHP در PHP واژه Overloading به معنی ایجاد متدها و متغیرهای داینامیک است. این متدها و متغیر ها به وسیله متدهای جادویی یا Magic Methods ساخته میشن. ساخت متغیرهای داینامیک در PHP متد __set این متد برای ایجاد متغیرهای داینامیک استفاده میشه.متغیرهایی که یا داخل کلاس وجود ندارن یا متغیرهایی که در خارج از کلاس بهشون دسترسی نداریم. مثال :
class Car
{
private $vars = array() ;
function __set($name , $value)
{
$this->vars[$name] = $value ;
}
}
$car = new Car();
$car->wheel = 4 ;
$car ->color = 'red';
$car->name = 'BMW';
برای داشتن متغیرهای داینامیک بهترین راه استفاده از آرایه هاست. در کلاس Car یک آرایه با نام $vars ایجاد کردیم . دسترسی به آرایه $var به صورت Private تعریف شده یعنی در بیرون از کلاس به این آرایه دسترسی نداریم.سپس با متد __set متغیر $var رو مقدار دهی میکنیم.متد __set دو پارامتر میگیره.اولی نام کلید (key) و دومی مقدار (value) . هنگامی که شما از کد زیر استفاده میکنید : $car->color = 'red'; در حقیقت دارین ار زیر رو انجام میدید : $car->vars['color'] = 'red'; همینطور که میبینید استفاده از متد __set خیلی میتونه در کار با کلاسها به ما کمک کنه. متد __get() هنگامی که از متد __set برای ایجاد متغیرهای داینامیک در کلاس استفاده میکنیم نیاز داریم که بتونیم به این متغیرهای داینامیک دسترسی داشته باشیم و از مقادیر این متغیرها استفاده کنیم.با استفاده از متد __get به راحتی میتونیم این ار رو انجام بدیم.
class Car
{
private $vars = array() ;
function __set($name , $value)
{
$this->vars[$name] = $value ;
}
function __get($name)
{
return $this->vars[$name];
}
}
$car = new Car();
//set values
$car->wheel = 4 ;
$car ->color = 'red';
$car->name = 'BMW';
// Get values
echo $car->color ;
متد __get یک پارامتر میگیره که این پارامتر در اصل نام متغیرمونه. هنگامی که از کد : echo $car->color ; استفاده میکنیم در حقیقت کد زیر در پشت صحنه اتفاق میافته : echo $car->vars['color'] ; ساخت متدهای داینامیک در PHP در قسمت قبل دیدید که چطوری میتونیم در PHP متغیرهای داینامیک بسازیم و یاد گرفتیم که چطوری از مقادیرشون استفاده کنیم.در این قسمت خواهیم فهمید چطوری میتونیم متد ها یا توابع داینامیک رو با استفاده از متدهای جادویی در PHP پیاده سازی کنیم . __call متد جادویی با استفاده از متد __call میتونیم توابعی به صورت داینامیک بسازیم.این تابع دو مقدار میگیره اولی نام متد و دومی پارامترهای تابع مورد نظر رو میگیره. برای درک بهتر به مثال زیر دقت کنید : مثال : فرض کنید شما یک کلاس برای کار با دیتابیس نوشتید.خیلی خوبه که در کلاس شما توابعی باشه تا به صورت مستقیم با فیلدهای جدول شما در ارتباط باشه.مثلا هنگامی که میخواید با استفاده از فیلد ID درون دیتابیس جستجو کنید تابعی داشته باشید به صورت findByID یا اگر جستوجوی شما بر اساس فیلد name باشه با تابع findByName بتونید دستور SQL مورد نظر رو اجرا کنید.برای این کار دوراه دارید. اول اینکه به ازای هر فیلد جدولتون یک تابع بسازید مثلا :
class Database
{
…
function findByID($id)
{
$sql = " SELECT * FROM users WHERE id = $id";
return $this->db->query($sql);
}
function findByName($name)
{
$sql = "SELECT * FROM users WHERE name = $name";
return $this->db->query($sql);
}
}
فرض کنید تعداد فیلدهای جدول شما زیاد باشه. استفاده از این روش کار منطقی نیست. حالا ببینیم روش دوم برای این کار چیه. روش دوم استفاده از متد جادویی __call
class Database
{
function __call($method , $args)
{
$field =strtolower( substr($method , 6 , strlen($methods) – ۶)) ;
$sql = "SELECT * FROM $this->table WHERE $field = $args[0] " ;
return $this->db->query($sql);
}
}
$db = new Database();
$db->findByID(10);
$db->findByName('saeed');
حالا ببینیم متد جادویی __call چه کاری انجام میده که میتونیم متدهای داینامیک بسازیم. همینطور که در بالا گفتم این متد دو پارامتر میگیره.اولی نام تارع و دومی آرایه ای از پارامترهایی که باید به تابع داینامیک پاس بشن.مثال بالا یک مثال کاملا عملی برای استفاده از متد __call بود که در خیلی جاها کاربرد داره. $field =strtolower( substr($method , 6 , strlen($methods) – ۶)) ; در خط بالا ابتدا از متغیر $method قسمت findBy رو حذف کردیم.رشته ای که باقی میمونه نام فیلد جدولمونه.سپس به حروف کوچک تبدیلش کردیم و داخل دستور SQL ازش استفاده کردیم.
متد جادویی __callStatic این تابع از PHP نسخه ۵٫۳ معرفی شد. دقیقا مثل __call استفاده میشه اما همینطور که از نامش مشخصه برای متدهای static کاربرد داره. گاهی اوقات ممکنه لازم داشته باشیم یک شیء رو به یک رشته تبدیل کنیم.اگر بخواید با دستور echo یک شیء رو در خورجی چاپ کنید یک خطا اتفاق میافته : $car = new Car(); echo $car; // fatal error: Object of class Car could not be converted to string متد __toString() این زمانی اجرا میشه که بخوایم یک شیء رو در خروجی نمایش بدیم.
class Car
{
function __toString()
{
return get_class();
}
}
$car = new Car();
echo $car ; // Car
اگر داخل کلاس متد __toString() رو پیاده سازی کرده باشیم هنگامی که با دستور echo شیء $car رو میخوایم توی خروجی نمایش بدیم با خطا مواجه نمیشیم.در مثال بالا هنگامی که دستور echo $car; اجرا میشه تابع get_class() اجرا میشه.
Serialization Serialization به تبدیل یک شیء یا یک آرایه به رشته گفته میشه.از Serialization برای نگهداری اشاء در فایل یا دیتابیس استفاده میشه.هنگامی یک شیء رو به حالت اول برگردونیم Unserialize گفته میشه.هنگامی یک کلاس رو serialize میکنیم تمام متغیرها و اعضای کلاس ذخیره خواهند شد.اما مشکلی که هست اینه که ممکنه نخواسته باشیم مثلا متغیری که کانکشن دیتابیس رو تگهداری میکنه هم ذخیره یشه.برای این کار از متد __sleep() استفاده میکنیم. متد جادویی __sleep() این متد هنگامی اجرا میشه که تابعserialize() رو بخوایم روی شیء اجرا کنیم.داخل این متد میتونیم مشخص کنیم که چه متغیرهایی از کلاس اجازه دارن serialize بشن.این متد باید یک آرایه رو برگردونه. مثال :
class My
{
public $a;
public $b;
function __construct(){
$this->b = 'salam';
$this->a = 'a';
}
function __sleep()
{
//return get_object_vars($this);
return array('b');
}
}
$m = new My();
$a = (serialize($m));
var_dump(unserialize($a));
/*خروجی :
object(My)#2 (2) { ["a"]=> NULL ["b"]=> string(5) "salam" }
*/
همینطور که میبینید در خروجی کد بالا فقط متغیر $b دارای مقدار هست.این به این خاطره که آرایه ای که در متد __sleep() برگردانده شده فقط شامل متغیر b هست.
return array('b');
این هط میگه که هنگام serialize کلاس My فقط متغیر b حق ذخیره شدن رو داره. متد __wakeup() این متد هنگامی اجرا میشه که تابع unserialize() اجرا میشه.به عنوان مثال اگر هنگام serizalize یک شیء اتصال به دیتابیس رو بسته باشید داخل متد __wakeup میتونید این اتصال رو دوباره برقرار کنید.
class Database {
//...
public function __wakeup() {
// reconnect to the network
$this->connect();
}
//...
}
متد __invoke() این متد هنگامی اجرا میشه که بخواید از یک شیء به عنوان یک تابع استفاده کنید. خروجی بالا به شکل زیره : __invoke method. $x = 5 متد جادویی __autoload() متدهایی که در قسمت قبل آموزشش رو مشاهده کردید همگی در کلاسها قابل استفاده بودن. تابع __autoload یک تابع مستقل محسوب میشه.این تابع برای لود مستقیم کلاسها به کار میره.هنگامی که میخواید از یک کلاس یک شیء ایجاد کنید ابتدا نیاز هست که با دستور include یا require کلاس مورد نظر رو لود کنیم. require 'classes/database.class.php'; $db = new Database(); با استفاده از تابع __autoload از require کردن های زیاد راحت میشیم. در مثال بالا تمام کلاسهای پروژه ما در پوشه classes نگهداری میشن.
function __autoload($classname)
{
$class = 'classes/'.strtolower($classname).'.class.php';
require $class;
}
با استفاده از تابع بالا در هر جای پروژه میتونیم به صورت خودکار کلاسها رو لود کنیم. $db = new Database(); حرف آخر متدهای جادویی در PHP خیلی مفید هستن و انعطاف زیادی به برنامه نویسی شیء گرا میدن.با استفاده از این متدها لذت برنامه نویسی شیء گرا دوچندان میشه. اگر دقت کرده باشید در مقاله بالا سعی کردم ازاصطلاحات ساده برای دوستانی که اول راه هستند و با برنامه نویسی شیء گرا آشنایی زیادی ندارن استفاده کنم.مثلا یک جا از کلمه “متد (Method) ” و جای دیگه از کلمه ” تابع (function) ” استفاده کردم.منظورم از این کار این بوده که به کسانی که اول راه شیء گرایی هستن بفهمونم این ها فقط “اصطلاح” ـه و ممکنه در جاهای مختلف نامهای مختلفی داشته باشه.هنگامی که یک تابع در یک کلاس قرار میگیره به اصلاح بهش میگن ” متد ” اما مهم نیست بهش چی میگن مهم اینه که “تابع” همون “متد” ـه. مهم درک مفهوم شیء گرایی هست و لطفا ذهن خودتون رو درگیر این اصطلاحات نکنید. :: بازدید از این مطلب : 163 |
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||