
محمد گلمحمدی
برنامه نویس
هویت تاییدشدهاین هفته فعال بودهمهندس
نظر
۲
پست
۹
امتیاز
۵٫۰
دربارهی محمد گلمحمدی
توسعهدهنده نرمافزار با تمرکز بر PHP، Laravel و Node.js؛ علاقهمند به معماری نرمافزار، زیرساخت و ساخت محصولات واقعی.
نظر کاربران
خیلی مسلط بودن عالی
پستهای محمد گلمحمدی
سادهترین تعریف Factory Pattern در PHP اینه:
بهجای اینکه خودت مستقیم مشخص کنی چه کلاسی ساخته بشه، ساختن Object رو میسپاری به یک Factory.
بدون Factory
$payment = new ZarinpalPayment();
اگر بعداً بخوای درگاه رو عوض کنی، باید جاهای مختلف کدت رو تغییر بدی.
با Factory
interface Payment
{
public function pay();
}
class ZarinpalPayment implements Payment
{
public function pay()
{
return "پرداخت با زرینپال";
}
}
class IdpayPayment implements Payment
{
public function pay()
{
return "پرداخت با IDPay";
}
}
حالا Factory:
class PaymentFactory
{
public static function make(string $type): Payment
{
return match ($type) {
'zarinpal' => new ZarinpalPayment(),
'idpay' => new IdpayPayment(),
default => throw new Exception('درگاه نامعتبر است'),
};
}
}
استفاده:
$payment = PaymentFactory::make('zarinpal');
echo $payment->pay();
خروجی:
پرداخت با زرینپال
یا:
$payment = PaymentFactory::make('idpay');
echo $payment->pay();
خروجی:
پرداخت با IDPay
پس Factory دقیقاً چه کار میکند؟
بهجای اینکه کد اصلیت درگیر این باشد:
if ($type === 'zarinpal') {
$payment = new ZarinpalPayment();
} elseif ($type === 'idpay') {
$payment = new IdpayPayment();
}
مینویسی:
$payment = PaymentFactory::make($type);
یعنی:
«من نمیخوام بدونم چه Objectی ساخته میشه؛ Factory خودش تصمیم بگیره.»
۹ پسند · ۱ دیدگاه · ۴۴ بازدید
اگر میخوای کدت قابل نگهداریتر، انعطافپذیرتر و حرفهایتر باشه، Design Patternها رو باید بشناسی. 👨🏻💻
چندتا از پرکاربردترینها:
🔹 Creational
Singleton
Factory Method
Abstract Factory
Builder
Prototype
🔹 Structural
Adapter
Decorator
Facade
Composite
Proxy
🔹 Behavioral
Observer
Strategy
Command
Template Method
State
نکته مهم:
Design Patternها قرار نیست کدت رو پیچیدهتر کنن؛ هدفشون اینه که برای مسائل تکرارشونده، راهحلهای قابلاعتماد و قابلاستفاده مجدد داشته باشی.
اگر برنامهنویسی میکنی، حداقل این ۵ تا رو عمیق یاد بگیر:
Factory • Strategy • Observer • Adapter • Decorator
توی ۵ پست، این ۵ دیزاین پترن کاربردی رو کامل توضیح میدم.
تو پروژههات بیشتر از کدوم Design Pattern استفاده میکنی؟ 👇
#DesignPatterns #SoftwareEngineering #Programming #PHP #Laravel #Backend #Developer #CleanCode #OOP #برنامه_نویسی #طراحی_نرم_افزار
۷ پسند · ۰ دیدگاه · ۴۴ بازدید
** یک راه تمیز برای توسعهپذیری بیشتر **
گاهی میخوایم قابلیت جدیدی به یک کلاس اضافه کنیم، بدون اینکه کلاس اصلی رو دستکاری کنیم.
اینجاست که Decorator Pattern وارد میشه.
دیکریتور بهت اجازه میده رفتار یک آبجکت رو با Wrapping کردنش گسترش بدی؛ بدون اینکه مجبور باشی کلاس اصلی رو تغییر بدی.
🔹 افزودن قابلیت جدید بدون تغییر کلاس اصلی
🔹 ترکیب چند دیکریتور با هم
🔹 کاهش وابستگی به ارثبری
🔹 کد تمیزتر و قابل نگهداریتر
مثلاً میتونی یک سرویس ساده داشته باشی و بعد Logging، Cache یا Authorization رو با دیکریتور بهش اضافه کنی.
Decorator فقط یک الگوی طراحی نیست؛ یک ابزار برای ساخت کد منعطفتره.
اگر PHP کار میکنی، این پترن رو حتماً یاد بگیر.
#PHP #Laravel #DesignPatterns #DecoratorPattern #CleanCode #SoftwareDevelopment #Backend #برنامه_نویسی #پی_اچ_پی #لاراول #الگوهای_طراحی
۷ پسند · ۰ دیدگاه · ۳۲ بازدید
یکی از مشکلاتی که در سرورهای PHP ممکنه بعد از مدتی خودش رو نشون بده:
- مصرف RAM دائماً افزایش پیدا میکنه
- Processهای PHP-FPM حافظه زیادی میگیرن
- Performance سرور افت میکنه
- و در نهایت OOM Killer وارد عمل میشه!
اما همیشه مشکل از خود PHP نیست.
چند دلیل رایج:
🔹 کد یا مدیریت نادرست حافظه
استفاده نامناسب از متغیرهای global، static یا نگهداشتن دادههای حجیم.
🔹 Extensionهای PHP
گاهی یک extension دارای bug یا مشکل مدیریت حافظه است.
🔹 Resourceهای خارجی
مثل اتصالهای دیتابیس، فایلها یا Socketهایی که درست آزاد نمیشوند.
🔹 Requestهای سنگین
Loopهای بزرگ، پردازش فایل، Queryهای سنگین یا ساخت Objectهای زیاد.
🔹 Cacheهای حجیم
نگهداشتن آرایهها و دادههای بزرگ در حافظه بدون آزادسازی مناسب.
🔹 Bug در نسخه PHP یا PHP-FPM
گاهی مشکل واقعاً از یک bug شناختهشده در نسخه مورد استفاده است.
** از کجا بفهمیم مشکل کجاست؟ **
- مصرف Memory هر Worker را مانیتور کنید
- Requestهای سنگین را پیدا کنید
- Extensionها را بررسی کنید
- نسخه PHP و PHP-FPM را بهروز نگه دارید
- تنظیماتی مثل pm.max_children و pm.max_requests را متناسب با سرور تنظیم کنید.
یک نکته مهم:
`pm.max_requests` درمان Memory Leak نیست؛ بیشتر یک راهکار Mitigation است تا Workerهایی که به مرور حافظه بیشتری مصرف میکنند، بعد از تعداد مشخصی Request مجدداً ساخته شوند.
اگر با PHP-FPM کار میکنید،
بزرگترین Memory Leak که در پروژهتون دیدید چی بوده؟
#PHP #PHPFPM #Backend #Linux #DevOps #MemoryLeak #Performance #Programming
۷ پسند · ۱ دیدگاه · ۲۸ بازدید
📌 آرایه و آبجکت در PHP چطور به Function پاس داده میشن؟
یکی از نکات مهم PHP اینه که رفتار Array و Object هنگام ارسال به تابع متفاوت است.
🔹 Array → بهصورت Value
بهصورت پیشفرض یک کپی از آرایه به تابع داده میشود؛ بنابراین تغییرات داخل تابع، آرایه اصلی را تغییر نمیدهد.
function changeArray($arr) {
$arr['name'] = 'Weeno';
}
$data = ['name' => 'Ali'];
changeArray($data);
echo $data['name']; // Ali
🔹 Object → بهصورت Reference-like
وقتی یک Object را به تابع میدهیم، تغییر propertyهای آن روی همان Object اصلی اثر میگذارد.
function changeUser($user) {
$user->name = 'Weeno';
}
$user = new User('Ali');
changeUser($user);
echo $user->name; // Weeno
💡 نکته مهم:
اگر بخواهی آرایه اصلی داخل تابع تغییر کند، میتوانی از & استفاده کنی:
function changeArray(&$arr) {
$arr['name'] = 'Weeno';
}
پس خلاصه:
Array → کپی میشود
Object → همان Object در دسترس تابع قرار میگیرد
اگر PHP کار میکنی، این تفاوت را حتماً باید بلد باشی. 👨💻
#PHP #PHPProgramming #برنامه_نویسی #آموزش_برنامه_نویسی #Backend #WebDevelopment #Laravel
۶ پسند · ۰ دیدگاه · ۲۴ بازدید
کسب درآمد با وینو
وِينُو پلتفرمی برای تولید محتوا و کسب درآمدِ پایدار از تخصصِ شماست.
پروفایل بسازید، محتوای آموزشی یا مشاوره منتشر کنید، و از طریق فروش دوره، حمایت مردمی و تماسهای تخصصی درآمد کسب کنید.
مخاطبانِ هدف را هدفگذاری کنید و با ابزارهای تحلیل وینو رشد کنید.
برای شروع نیازی به سرمایه نیست؛ تنها تخصص و زمان لازم است.
۸ پسند · ۱ دیدگاه · ۱۱ بازدید
۵۰۰٬۰۰۰ تومان / جلسه
جلسهی آنلاین ۱ ساعت
نزدیکترین وقتبا هماهنگی |
مدت جلسه۱ ساعت |
پرداخت داخل وینو انجام میشود و تا پایان جلسه نزد ما میماند.









