#مانیتور خوب چی بگیرم؟
اگر دنبال مانیتور خوب و مقرون به صرفه میگردید مانیتور های GPlus رو پیشنهاد میکنم
این مانیتور ها از برند ایرانی هستن (ساخت چین) به همین خاطر قیمت های نسبتا پایین تری به مانیتور های Asus یا LG دارن
حدود دو سال هست از این مانیتور ها استفاده میکنم و برای برنامه نویسی کیفیت خوبی داشتند
این مانیتور ها توی سه سری LN, FN, QN هستند
سری QN قیمت بیشتری داره و با مانیتور های LG و.. تفاوت خاصی نداره
مزیتش هم تاخیر 1ms اون هست که برای گیمینگ و گرافیک مناسب هست
سری بعد FN هست این سری قیمت بیشتری از LN داره ولی توی کارکرد تفاوت خاصی نداره و قیمت بیشترش بخاطر تکنولوژی ایی هست که توش بکار رفته
اگر برای برنامه نویسی میخواید من سری LN این مانیتور هارو پیشنهاد میکنم
اگر هم قصد بازی یا طراحی دارید QN
این مانیتور ها از سایز 22 تا 32 اینچ هم موجود هستند
حدود دو سال هست که دو تا ۲۷ این مدل رو داشتم به علاوه ۲۴ که قبلا داشتم و واقعا عالی کار کرده و میکنه
به علاوه طراحی زیبا و باریک اون
اگر دنبال مانیتور خوب و مقرون به صرفه میگردید مانیتور های GPlus رو پیشنهاد میکنم
این مانیتور ها از برند ایرانی هستن (ساخت چین) به همین خاطر قیمت های نسبتا پایین تری به مانیتور های Asus یا LG دارن
حدود دو سال هست از این مانیتور ها استفاده میکنم و برای برنامه نویسی کیفیت خوبی داشتند
این مانیتور ها توی سه سری LN, FN, QN هستند
سری QN قیمت بیشتری داره و با مانیتور های LG و.. تفاوت خاصی نداره
مزیتش هم تاخیر 1ms اون هست که برای گیمینگ و گرافیک مناسب هست
سری بعد FN هست این سری قیمت بیشتری از LN داره ولی توی کارکرد تفاوت خاصی نداره و قیمت بیشترش بخاطر تکنولوژی ایی هست که توش بکار رفته
اگر برای برنامه نویسی میخواید من سری LN این مانیتور هارو پیشنهاد میکنم
اگر هم قصد بازی یا طراحی دارید QN
این مانیتور ها از سایز 22 تا 32 اینچ هم موجود هستند
حدود دو سال هست که دو تا ۲۷ این مدل رو داشتم به علاوه ۲۴ که قبلا داشتم و واقعا عالی کار کرده و میکنه
به علاوه طراحی زیبا و باریک اون
👍5
استفاده از متد های زنجیره ایی در #php
#chainMethode
شاید دیده باشید توی برخی کتابخانه ها و فریم ورک ها، متد های پشت سر هم به صورت زنجیروار نوشته میشن
به عنوان مثال
حالا چطور میتونیم اینارو توی پروژه های خودمون بسازیم
ساخت این نوع متد ها خیلی ساده هست و فقط کافیه هر متد از کلاستون که میخواید زنجیره ایی بشه یک شی از همون کلاس برگردونه یا به اصلاح return بکنه
مثال
#chainMethode
شاید دیده باشید توی برخی کتابخانه ها و فریم ورک ها، متد های پشت سر هم به صورت زنجیروار نوشته میشن
به عنوان مثال
methode1->methode2->methode3حالا چطور میتونیم اینارو توی پروژه های خودمون بسازیم
ساخت این نوع متد ها خیلی ساده هست و فقط کافیه هر متد از کلاستون که میخواید زنجیره ایی بشه یک شی از همون کلاس برگردونه یا به اصلاح return بکنه
مثال
class MyClass {
public function methode1(){
return $this;
}
public function methode2(){
return $this;
}
public function methode(){
return $this;
}
}👍3
Forwarded from | Erfan's Notes |
💠 دوره آموزش برنامهنویسی ربات تلگرام
دورهای که در اون از پایه شروع میکنیم به توضیح مفاهیم مربوط به ربات و نحوه توسعه رباتهای تلگرامی
قسمتها به صورت تدریجی منتشر میشن
⭕️ پست توضیحات کامل دوره رو میتونید اینجا بخونید
🔰 پلیلیست دوره در یوتیوب رو هم میتونید اینجا ببینید
دورهای که در اون از پایه شروع میکنیم به توضیح مفاهیم مربوط به ربات و نحوه توسعه رباتهای تلگرامی
قسمتها به صورت تدریجی منتشر میشن
⭕️ پست توضیحات کامل دوره رو میتونید اینجا بخونید
🔰 پلیلیست دوره در یوتیوب رو هم میتونید اینجا ببینید
👍2
زبان برنامه نویسی #mojo یک زبان با قابلیت های پایتون و عملکرد C هست که این زبان رو برای توسعه AI فوق العاده میکنه
این زبان با قابلیت heterogenous runtime (پردازش ناهمگن، استفاده از تمام قدرت سخت افزاری از جمله تمامی هسته ها و واحد های شتابدهنده) پرفورمنس بالایی مثل زبان C++ رو با اما با سادگی Python بهتون ارائه میده
طبق داکیومنت این زبان، 35000 برابر سریع تر از python و 5000 برابر سریع تر از C++ هست که واقعا سرعت باورنکردنی ایی داره
نکته جالب دیگه این هست که شما میتونید کتابخانه های پایتونی مثل Numpy و Matplotlib رو با این زبان ترکیب کنید
در کل Mojo یک زبان خیلی عالی برای توسعه AI هست
برای مطالعه راجبش میتونید به سایتش برید
https://www.modular.com/mojo
این زبان با قابلیت heterogenous runtime (پردازش ناهمگن، استفاده از تمام قدرت سخت افزاری از جمله تمامی هسته ها و واحد های شتابدهنده) پرفورمنس بالایی مثل زبان C++ رو با اما با سادگی Python بهتون ارائه میده
طبق داکیومنت این زبان، 35000 برابر سریع تر از python و 5000 برابر سریع تر از C++ هست که واقعا سرعت باورنکردنی ایی داره
نکته جالب دیگه این هست که شما میتونید کتابخانه های پایتونی مثل Numpy و Matplotlib رو با این زبان ترکیب کنید
در کل Mojo یک زبان خیلی عالی برای توسعه AI هست
برای مطالعه راجبش میتونید به سایتش برید
https://www.modular.com/mojo
🔥3👍1
دو ابزاری که این روز ها داره راجبش صحبت میشه هوش مصنوعی DragGAN و Generative Fill هستند
هوش مصنوعی DragGAN که ویدیو اول موجوده باهاش میتونید یه سادگی با درگ کردن تصاویر رو حرکت بدید
این ابزار توسط Adobe توسعه داده شده و قراره در PhotoShop مورد اسفاده قرار بگیره
نکته جالبش این هست که کاملا اوپن سورس هست
میتونید مستنداتش رو از این لینک مشاهده کنید
ابزار دوم Generative Fill هست که با نوشتن میتونید افکارتون رو به تصویر تبدیل کنید که اونم نمونه ش توی ویدیو های بالا هست
این ابزار هم قراره در PhotoShop مورد استفاده قرار بگیره
هوش مصنوعی DragGAN که ویدیو اول موجوده باهاش میتونید یه سادگی با درگ کردن تصاویر رو حرکت بدید
این ابزار توسط Adobe توسعه داده شده و قراره در PhotoShop مورد اسفاده قرار بگیره
نکته جالبش این هست که کاملا اوپن سورس هست
میتونید مستنداتش رو از این لینک مشاهده کنید
ابزار دوم Generative Fill هست که با نوشتن میتونید افکارتون رو به تصویر تبدیل کنید که اونم نمونه ش توی ویدیو های بالا هست
این ابزار هم قراره در PhotoShop مورد استفاده قرار بگیره
👍3
مفهوم و کاربرد #ORM چیست؟
از
همچنین، با استفاده از روابط مدلها، میتوانید به صورت آسان روابط یک به یک، یک به چند و چند به چند را بین مدلها تعریف کنید.
به عنوان مثال به
لاراول به صورت پیشفرض از
به عنوان مثال یک کوئری برای گرفتن کاربری با آی دی 1 به صورت زیر هست:
از
ORM یا Object-Relational Mapping برای تعامل با پایگاه داده استفاده میشود و میتوانید به جای نوشتن کوئریهای SQL برای انجام عملیات پایگاه داده، از مدلها و روابط بین آنها استفاده کنید.همچنین، با استفاده از روابط مدلها، میتوانید به صورت آسان روابط یک به یک، یک به چند و چند به چند را بین مدلها تعریف کنید.
به عنوان مثال به
ORM در فریم ورک قدرتمند Laravel نگاه می کنیم :لاراول به صورت پیشفرض از
Eloquent ORM استفاده میکند. Eloquent ORM یک قابلیت پرقدرت است که توسط این فریم ورک پیاده سازی شده و اجازه این رو به ما میده تا با استفاده از مدلها و روابط آنها، کوئریهای پایگاه داده را ایجاد و اجرا کنید.به عنوان مثال یک کوئری برای گرفتن کاربری با آی دی 1 به صورت زیر هست:
SELECT * FROM user WHERE id=1حالا همین کار با استفاده از
Eloquent ORM به این صورت هست:User::find(1);در همین مثال کوچک دیدیم که کار چقدر ساده شده و نیاز به سر و کله زدن با
SQL نیست حالا تصور کنید کوئری ای داشته باشیم که چندین JOIN و SELECT رو با هم و کلی رابطه های تو در تو داشته باشه، در این صورت ما باید کلی SQL پیچیده بنویسیم. ولی ORM این کارو با چند تا تابع انجام میده.👍5
Forwarded from DevDashers (DevD)
PHPProfessionalTipsSecrets.pdf
3.3 MB
یک کتاب خوب برای حرفه ای ها
اگر توسعه دهنده PHP هستید و میخواید نکات و رازهای کاربردی ئی رو در مورد این زبان بدونید حتما این کتاب رو بخونید
@DevDashers
اگر توسعه دهنده PHP هستید و میخواید نکات و رازهای کاربردی ئی رو در مورد این زبان بدونید حتما این کتاب رو بخونید
@DevDashers
🔥3
DevDashers
PHPProfessionalTipsSecrets.pdf
#Book #PHP #PDF
حقیقتا کتاب خیلی جامع و کاملیه
اگه علاقه به مطالعه داشتید پیشنهاد میشه
تمامی مباحث رو توضیح داده تو نگاهی که من انداختم
حجمشم خیلی زیاد نیست
حقیقتا کتاب خیلی جامع و کاملیه
اگه علاقه به مطالعه داشتید پیشنهاد میشه
تمامی مباحث رو توضیح داده تو نگاهی که من انداختم
حجمشم خیلی زیاد نیست
👍1
#PHP #OOP
کلاس انتزاعی یا
گونه ایی از کلاس ها می باشد که نمیتوان از آن شئ ساخت و آن را به عنوان پایه ایی برای کلاس های فرزند آن در نظر میگیرند.
در
شیوه تعریف این کلاس ها به صورت زیر می باشد:
با تعریف
استفاده از
مثال های بالا با زبان PHP هستند، اما پایه و اساس
کلاس انتزاعی یا
Abstract Class :گونه ایی از کلاس ها می باشد که نمیتوان از آن شئ ساخت و آن را به عنوان پایه ایی برای کلاس های فرزند آن در نظر میگیرند.
در
Abstract Class ها به جز متد های عادی میتوان Abstract Method هم تعریف کرد.شیوه تعریف این کلاس ها به صورت زیر می باشد:
abstract class Fruit {
}
و برای تعریف Abstract Method ها باید توجه داشته باشید که بدون بدنه تعریف می شوند و تنها نام و ورودی های تابع مشخص شود. مثال:abstract public function banana();و در نهایت شکل کامل یک
Abstract Class به این صورت می باشد:abstract class Fruit {
abstract public function color();
abstract public function price();
abstract public function taste();
}
و سپس با extends کردن آن به کلاس مورد نظر استفاده می شود:class Banana extends Fruit {
public function color() {
return 'yellow';
}
public function price() {
return '1$';';
}
public function taste() {
return 'sweet';
}
}
میتوان یک Abstract class برای تعریف یک قالب پایه استفاده کرد که قراردادی را بین کلاسهای فرزند ایجاد کند.با تعریف
Abstract Method، مشخص میشود که کلاسهای فرزند باید متدهای خاصی را پیادهسازی کنند.استفاده از
Abstract class به شما امکان میدهد که به صورت پلیمورفیک با کلاسهای فرزند برخورد کنید.مثال های بالا با زبان PHP هستند، اما پایه و اساس
Abstract class در همه ی زبان ها به همین صورت هستند و تنها در مواردی سینتکس آنها متفاوت است.🔥4👍3
#PHP #OOP
اینترفیس یا
اینترفیس ها شبیه به
در ابتدا روش استفاده از
برای تعریف یک
1- در
2- هر کلاس تنها می تواند یک
3- در
چه موقع از آنها استفاده کنیم؟
زمانی که قراردادها را برای کلاسهای مختلف تعریف میکنید و تنها نیاز به تعریف متدهای خالص بدون بدنه دارید، از
اما در صورتی که میخواهید یک کلاس پایه بسازید که خود آن تعدادی متد نیز داشته باشد و همچنین به کلاسهای زیرمجموعه اجازه دهید برخی از متدها را پیادهسازی کنند، از
مثال های بالا با زبان
اینترفیس یا
interface :اینترفیس ها شبیه به
abstract class ها هستند، اما در برخی موارد تفاوت هایی دارند که به آن ها می پردازیم.در ابتدا روش استفاده از
interface ها را مورد بررسی قرار می دهیم:برای تعریف یک
interface به صورت زیر عمل می کنیم:interface Fruit{
}
و برای تعریف توابع ها همانند abstract class متد هایی بدون بدنه تعریف می کنیم:public function color();و در نهایت شکل کلی یک
interface به صورت زیر است:interface Fruit {
public function color();
public function price();
public function taste();
}
برای ارث بری آن از کلیدواژه implements استفاده می شود و به صورت زیر مورد استفاده قرار می گیرد:class Banana implements Fruit {
public function color() {
return 'yellow';
}
public function price() {
return '1$';';
}
public function taste() {
return 'sweet';
}
}
و اما تفاوت های interface و abstract class :1- در
interface ها تنها می توان توابع بدون بدنه تعریف کرد با این تفاوت که در abstract class ها علاوه برا توابع بدون بدنه توابع دارای بدنه نیز می توان تعریف کرد.2- هر کلاس تنها می تواند یک
abstract class را extends کند ولی در interface ها این گونه نیست و می توان چندین interface را implements کرد.3- در
interface ها تنها می توان متد های بدون بدنه و خالص تعریف کرد ولی در abstract class ها می توان متغییر و خصوصیات را نیز تعریف کرد.چه موقع از آنها استفاده کنیم؟
زمانی که قراردادها را برای کلاسهای مختلف تعریف میکنید و تنها نیاز به تعریف متدهای خالص بدون بدنه دارید، از
interface استفاده کنید. اما در صورتی که میخواهید یک کلاس پایه بسازید که خود آن تعدادی متد نیز داشته باشد و همچنین به کلاسهای زیرمجموعه اجازه دهید برخی از متدها را پیادهسازی کنند، از
abstract class استفاده کنید.مثال های بالا با زبان
PHP هستند، اما پایه و اساس interface در همه ی زبان ها به همین صورت هستند و تنها در مواردی سینتکس آنها متفاوت است.🔥3👍1
#PHP #OOP
تِرِیت یا
در ادامه مبحث شئ گرایی به بحث trait ها می رسیم.
تریت ها به شما این امکان را می دهند تا متد هایی که می خواهید در چندین کلاس استفاده کنید را به صورت جداگانه در بخشی دیگر تعریف کنید و در کلاس های مختلف استفاده کنید.
به عنوان مثال شما متدی به نام
مثال های بالا با زبان
تِرِیت یا
trait چیست:در ادامه مبحث شئ گرایی به بحث trait ها می رسیم.
تریت ها به شما این امکان را می دهند تا متد هایی که می خواهید در چندین کلاس استفاده کنید را به صورت جداگانه در بخشی دیگر تعریف کنید و در کلاس های مختلف استفاده کنید.
به عنوان مثال شما متدی به نام
getColor دارید و می خواهید در دو کلاس Fruit و Vegetables استفاده کنید، در این موقعیت شما با استفاده از trait یک بار متد getColor را تعریف می کنید و در این دو کلاس use می کنید. مثال:trait Color{
public function getColor(){
return 'red';
}
}
class Fruit{
use Color;
public function chery(){
return $this->getCollor();
}
}
class Vegetables{
use Color;
public function tomato(){
return $this->getCollor();
}
}
در این نمونه شما با یک بار تعریف یک متد در دو یا چند کلاس از آن استفاده کردید و از نوشتن کد های اضافی جلوگیری کردید.مثال های بالا با زبان
PHP هستند، اما پایه و اساس trait در همه ی زبان ها به همین صورت هستند و تنها در مواردی سینتکس آنها متفاوت است.❤1👍1🔥1 1
عبارت
اما نسبت به
به عنوان مثال برخلاف
از لحاظ پرفورمنس چند تا تست گرفتم و تفاوت آنچنانی ندارن ولی خب
در پایان ساختارش به صورت زیر هست:
match که از php ورژن 8.0 به بعد در دسترس قرار داره همونطور که از اسمش پیدا هست برای match کردن یا تطبیق دادن دو مقدار با هم استفاده میشه، میشه گفت همون switch case هست.اما نسبت به
switch case تفاوت هایی داره،به عنوان مثال برخلاف
switch case که از == برای مقایسه استفاده می کنه، عبارت match از === استفاده می کنه.از لحاظ پرفورمنس چند تا تست گرفتم و تفاوت آنچنانی ندارن ولی خب
match بسیار کوتاه تر و خوانا تر هست و با دقت بیشتر.در پایان ساختارش به صورت زیر هست:
$number = rand(0, 5);کد بالا با
echo match ($number) {
1 => 'number 1',
2 => 'number 2',
3 => 'number 3',
4 => 'number 4',
default => 'another number',
};
switch case به صورت زیر هست:$number = rand(0, 5);همونطور که می بینید بسیار کوتا تر و خوانا تر هست.
switch ($number){
case 1:
echo 'number 1';
break;
case 2:
echo 'number 2';
break;
case 3:
echo 'number 3';
break;
case 4:
echo 'number 4';
break;
default:
echo 'another number';
break;
}
🔥3❤1👍1
در رابطه با پست دیروز برخی از دوستان گفته بودند که
بریم با هم دیگه بررسیش بکنیم:
گفتیم که در
ولی حل این مشکل راه های زیادی داره و میریم که چند تا راهش رو ببینیم:
راه حل اول : داخل
در کل اومدن
مطالب بیشتر رو از دو رفرنس زیر میتونید دنبال کنید:
داکیومنت php
تفاوت های switch case و match
.
match بدرد بخور نیست و برخلاف switch case که میشه به ازای هر case تعداد زیادی دستور اجرا کنیم در match فقط میشه تعدادی دستور محدود رو اجرا کرد، ولی خب چنین چیزی صحت نداره.بریم با هم دیگه بررسیش بکنیم:
گفتیم که در
switch case به ازای هر case دستورات زیادی میشه اجرا کرد، مثال :switch (1){
case 1:
$a = 10;
$b = 20;
$c = 30;
echo 'hello';
echo 'bye';
return null;
}
در مثال بالا 6 عمل تنها در یک case اجرا میشه، ولی داخل match به این صورت نمی تونیم دستورات رو پشت سر هم بنویسیم.ولی حل این مشکل راه های زیادی داره و میریم که چند تا راهش رو ببینیم:
راه حل اول : داخل
index های match یک anonymous functions پاس میدیم و کار هایی که میخوایم بکنیم رو داخلش می نویسیم و سپس match رو داخل یک متغییر میریزیم و متغییر رو به عنوان تابع صدا می زنیم:$do = match (1){
1=> function (){
echo 'hello';
echo 'bye';
return null;
}
};
$do();
راه حل دوم anonymous functions رو داخل match صدا میزنیم:match (1){
1=> (function (){
echo 'hello ';
})()
};
راه حل سوم یک تابع تعریف می کنیم و کار هایی که می خوایم بکنیم رو داخلش می نویسیم و تابع رو داخل match صدا میزنیم:function test(){
echo 'hello ';
}
$do = match (1){
1=> test()
};
راه حل های بیشتری میتونه وجود داشته باشه و یک برنامه نویس خوب بهترین راه و کوتاه ترین راه رو پیدا می کنه.در کل اومدن
match داخل php دلیل بر این نیست که نباید از switch case استفاده کنیم، شما هستید که تصمیم می گیرید در چه موقعی از کدومشون استفاده کنید.مطالب بیشتر رو از دو رفرنس زیر میتونید دنبال کنید:
داکیومنت php
تفاوت های switch case و match
.
👍5👏1
فضای نام یا
به شما این امکان میدهد که کد های خود را سازماندهی کنید و از تداخل نام کلاس ها، تابع ها، ثابت ها و... جلوگیری کنید، یعنی اگر در پروژه خود به عنوان مثال دو کلاس با نام های
نکته:
مثال:
1.php
2.php
برای استفاده از این کلاس ها کافیست نام
.
namespace :به شما این امکان میدهد که کد های خود را سازماندهی کنید و از تداخل نام کلاس ها، تابع ها، ثابت ها و... جلوگیری کنید، یعنی اگر در پروژه خود به عنوان مثال دو کلاس با نام های
MyClass داشته باشید با استفاده از namespace ها آنها را از یکدیگر جدا می کنید.نکته:
namespace باید در ابتدای کد ها قرار گیرد و قبل از آن چیزی نوشته نشود.مثال:
1.php
<?php———————-
namespace App\Folder1;
class MyClass{
}
2.php
<?php
namespace App\Folder2;
class MyClass{
}
تا اینجا شما در دو فایل متفاوت کلاس های هم نام ساخته اید اما به واسطه namespace متفاوت آنها این دو کلاس از یکدیگر متمایز می شوند.برای استفاده از این کلاس ها کافیست نام
namespace و سپس نام کلاس را بنویسید، مثال:new App\Folder1\MyClass;
new App\Folder2\MyClass;
یا اینکه ابتدا با کلمه کلیدی use آنها را صدا زده و سپس استفاده کنید، مثال:use App\Folder1;
new MyClass;
برای استفاده از تابع ها با namespace از کله کلیدی use function استفاده می شود:use function App\myFunction;و برای استفاده از
myFunction();
constant ها از use const:
use const App\A;
echo A;
مورد بعدی alias ها یا نام مستعار برای use کردن هست که به شما این امکان رو میدهد تا namespace خود را با یک نام دیگر وارد کنید این کار می تواند برای کوتاه کردن namespace های طولانی یا تغییر نام به نام دلخواه به کار رود و کافی است عبارت as و سپس نام دلخواه را بعد از namespace وارد کنید، مثال:use App\Folder1\MyClass as MyAlias;
new MyAlias();
در این قسمت App\Folder1\MyClass با نام مستعار MyAlias مورد استفاده قرار گرفته است..
👍4🤔1
#magic_method #oop #php
مجیک متد یا
مجیک متد ها، متدهای خاصی هستند که در صورت انجام اقدامات خاصی بر روی یک شی، عملکرد پیشفرض
مجیک متد ها تنها درون کلاس ها، اینترفیس ها و تریت ها در دسترس هستند.
لیست مجیک متد های
.
مجیک متد یا
Magic Method در PHP:مجیک متد ها، متدهای خاصی هستند که در صورت انجام اقدامات خاصی بر روی یک شی، عملکرد پیشفرض
PHP را لغو میکنند.مجیک متد ها تنها درون کلاس ها، اینترفیس ها و تریت ها در دسترس هستند.
لیست مجیک متد های
PHP به شرح زیر است:__construct()—————————
__destruct()
__call()—————————
__callStatic()
__get()—————————
__set()
__isset()
__unset()
__sleep()—————————
__wakeup()
__serialize()—————————
__unserialize()
__toString()—————————
__invoke()—————————
__set_state()—————————
__clone()—————————
__debugInfo()
چند پست بعدی کانال به توضیح نسبتا کاملی از کاربرد این مجیک متد ها اختصاص داده می شود..
👍3🔥1
#magic_method #oop #php
توابع
مجیک متد
مجیک متد
این مجیک متد می تواند ورودی داشته باشد و تعداد ورودی ها نا محدود هستند.
مثال:
———————————-
تابع
مثال:
پس از
در مثال بالا اگر شئ ما
.
توابع
__construct() و __destruct()
این دو متد از مهم ترین مجیک متد ها هستند به خصوص __construct() و می توان گفت مخالف یکدیگر هستند.مجیک متد
__construct() عملیاتی را در هنگام ساخته شدن یک شئ و مجیک متد __destruct() عملیاتی را در هنگام نابودی یک شئ انجام می دهند.مجیک متد
__construct() برای انجام تنظیمات اولیه و مقدماتی شئ استفاده شود. به طور کلی، در این تابع، متغیرها و ویژگیهای شیء مقداردهی اولیه میشوند و عملیاتی که قبل از استفاده از شئ نیاز است انجام شود انجام میگیرد.این مجیک متد می تواند ورودی داشته باشد و تعداد ورودی ها نا محدود هستند.
مثال:
class Fruit {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$fruit = new Fruit("banana");
در این مثال هنگام ساخته شدن شی Fruit ورودی به نام banana وارد constructمی شود و داخل
public $nameذخیره می شود.تمام این عملیات هنگام ساخت شئ انجام می شود و بعد از آن
$nameبا مقدار
banana در دسترس است.———————————-
تابع
__destruct() در هنگام حذف یک شئ از حافظه، فراخوانی میشود و میتواند برای انجام عملیاتی قبل از حذف شئ مورد استفاده قرار بگیرد. مثلا میتواند برای آزادسازی منابع خارجی مانند فایلها یا پایگاهدادهها استفاده شود.مثال:
class Fruit {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function __destruct() {
echo $this->name . " is being deleted.";
}
}
$fruit
= new Fruit("banana");
unset($fruit
);
در مثال بالا در هنگام ساخت شئ متغیری با مقدار banana مقدار دهی میشود.پس از
unset کردن، شئ ما نابود و حذف شده در نتیجه در این مرحله destruct صدا زده می شود.در مثال بالا اگر شئ ما
unset نشود باز هم destruct اجرا می شود، زیرا کلاس ما عملیاتی برای انجام ندارد و در نتیجه نابود می شود و برنامه به اتمام می رسد. در نتیجه در این مرحله باز هم destruct اجرا می شود..
👍2