| کانال توسعهدهندگان PHP |
Відкрити в Telegram
⭕️ کانال توسعهدهندگان پیاچپی (PHP) دولوپیکس 💠 دولوپیکس | جامعه توسعهدهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport
Показати більше1 658
Підписники
-224 години
-77 днів
-1630 днів
Архів дописів
👨💻 سوال PHP برای توسعهدهندگان
خروجی اجرای کد زیر در PHP 8 چه خواهد بود؟
به تفاوت بین reference و مقدار کپیشده، و همینطور رفتار تابع با آرگومانها دقت کنید.
🔖 #PHP #پی_اچ_پی
👤 Developix
💎 Channel: @DevelopixPHP
Guzzle — کلاینت HTTP برای PHP
Guzzle یک کتابخانهٔ معتبر و فعال برای ارسال درخواستهای HTTP در PHP است. بهسادگی با APIهای REST، سرویسهای خارجی و میکروسرویسها کار میکند و مدیریت زمانانتظار، خطاها و درخواستهای همزمان را آسان میکند. 🚀
ویژگیها و مزایا:
- ✅ پشتیبانی sync و async (Promise)
- ✅ Middleware و مدیریت هدر/کوکی
- ✅ Pool برای درخواستهای همزمان و بهینهسازی کارایی
- ✅ قابلیت تنظیم timeout، retries و stream برای دانلود فایل
نمونه نصب و استفاده:
<?php
// نصب: composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client(['base_uri' => 'https://api.github.com/']);
$res = $client->request('GET', 'users/guzzle');
echo $res->getStatusCode();
echo $res->getBody();
موارد کاربرد: فراخوانی APIهای خارجی، ارتباط بین سرویسها، تست و نمونهسازی سریع کلاینت HTTP. نکته: از timeout و retries مناسب استفاده کنید تا برنامه پایدار بماند. 🔧
مستندات رسمی: docs.guzzlephp.org
کد منبع: github.com/guzzle/guzzle
تجربهتان را با Guzzle امتحان کنید و بازخورد خود را به اشتراک بگذارید. ✨
🔖 #PHP #پی_اچ_پی #Guzzle #HTTP #API #PHP
👤 Developix
💎 Channel: @DevelopixPHPامنیت ورودیها همیشه نقطهضعف اپلیکیشنهاست. استفاده از prepared statements در PDO یک راهکار ساده و مؤثر برای جلوگیری از SQL Injection است.
ایدهٔ اصلی (مختصر)
با آمادهسازی کوئری و جدا کردن دادهها از ساختار SQL، هر ورودی بهعنوان داده تفسیر میشود نه دستور SQL. در نتیجه حتی ورودیهای مخرب اجرا نخواهند شد.
مثال شفاف
در این مثال یک اتصال PDO امن و نمونهٔ استفاده از پارامترهای نامدار را میبینید. دقت کنید که
PDO::ERRMODE_EXCEPTION روشن است تا خطاها واضح باشند.
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// INSERT امن با پارامتر نامدار
$stmt = $pdo->prepare('INSERT INTO users (email, name) VALUES (:email, :name)');
$stmt->execute([':email' => $email, ':name' => $name]);
// استفادهٔ مجدد برای SELECT
$select = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$select->execute([':email' => $email]);
$user = $select->fetch(PDO::FETCH_ASSOC);
?>
نکات عملی و خطاهای رایج
- هرگز ورودیها را با string concatenation داخل کوئری قرار ندهید.
- از bindValue یا آرایهٔ execute برای ارسال پارامترها استفاده کنید.
- نوع داده را در صورت نیاز explicit کنید (مثلاً PDO::PARAM_INT).
- اتصال با charset=utf8mb4 و ERRMODE_EXCEPTION را فراموش نکنید.
اگر تجربهای در مهاجرت از mysql_* یا mysqli به PDO دارید یا سوالی هست، خوشحال میشم بشنوم و بحث کنیم.
منبع: مستندات رسمی PHP — PDO Prepared Statements
🔖 #PHP #پی_اچ_پی #php #pdo #security #sql_injection #prepared_statements
👤 Developix
💎 Channel: @DevelopixPHPآشنایی با Reflection در PHP
بخش اول - مقدمهای بر مفهوم Reflection
در بسیاری از مواقع، ممکن است بخواهیم برنامهای بنویسیم که بتواند ساختار خود را در زمان اجرا بررسی و تحلیل کند.
به عنوان مثال:
- فریمورکی که بتواند کنترلرها و متدهای آنها را به صورت خودکار شناسایی کند؛
- ابزاری برای تست خودکار که بدون دخالت انسان، متدهای آزمون را پیدا و اجرا نماید؛
- یا حتی سیستمی که بر اساس type hintها، وابستگیها را به صورت خودکار تزریق کند.
چنین قابلیتهایی با استفاده از Reflection API در PHP امکانپذیر است.
این ابزار یکی از بخشهای پیشرفته و کمتر شناختهشدهی زبان PHP است که قدرت زیادی برای تحلیل، بازرسی و حتی تغییر رفتار کد در زمان اجرا در اختیار توسعهدهنده قرار میدهد.
تعریف Reflection
به طور خلاصه، Reflection در PHP به مجموعهای از کلاسها و متدها گفته میشود که امکان بازتاب (reflection) و خودشناسی (introspection) کد را در زمان اجرا فراهم میکنند.
به بیان دیگر، با استفاده از Reflection میتوان:
- ساختار کلاسها، توابع و متدها را شناسایی کرد،
- نوع و ویژگیهای پارامترها را تشخیص داد،
- متدها را به صورت پویا فراخوانی کرد،
- و حتی به اعضای private و protected دسترسی پیدا نمود (در صورت نیاز و آگاهی از خطرات امنیتی آن).
کاربردهای Reflection در دنیای واقعی
Reflection در پروژههای واقعی کاربردهای متعددی دارد. در ادامه به برخی از مهمترین آنها اشاره میشود:
1- فریمورکها و سیستمهای خودکارسازی
در فریمورکهایی مانند Laravel و Symfony، از Reflection برای شناسایی خودکار کنترلرها، متدها و type hintها استفاده میشود.
به عنوان نمونه، در زمان اجرای Dependency Injection Container، با استفاده از Reflection مشخص میشود که هر کلاس چه نوع وابستگیهایی دارد و باید چه اشیایی به آن تزریق شود.
2- تستنویسی (Unit Testing)
در ابزارهایی مانند PHPUnit، از Reflection برای یافتن متدهایی استفاده میشود که با test آغاز میشوند.
همچنین از این قابلیت برای دسترسی به متدها و پراپرتیهای خصوصی (private/protected) جهت تست دقیقتر منطق داخلی کلاسها بهره گرفته میشود.
3- ORM و Map کردن دادهها
کتابخانههایی مانند Doctrine ORM از Reflection برای بررسی ساختار کلاسها و تبدیل آنها به جداول پایگاه داده استفاده میکنند.
در واقع، Reflection به ORM کمک میکند تا بدون نیاز به پیکربندی دستی، تشخیص دهد هر property به کدام ستون از جدول مرتبط است.
4- ابزارهای تحلیل و اشکالزدایی
ابزارهای Debug و Code Analysis میتوانند با استفاده از Reflection، در زمان اجرا اطلاعات دقیقی از وضعیت کلاسها و اشیاء جمعآوری کنند.
این اطلاعات در ساخت ابزارهای Documentation Generator، Profiler و Static Analyzer کاربرد فراوان دارد.
ملاحظات عملکرد و امنیت
هرچند Reflection امکانات بسیار قدرتمندی در اختیار توسعهدهنده قرار میدهد، اما باید در استفاده از آن احتیاط نمود:
- اجرای Reflection ممکن است اندکی باعث افزایش بار پردازشی (Performance Overhead) شود.
- دسترسی به متدها و پراپرتیهای private/protected در صورت استفادهی نادرست میتواند ریسک امنیتی ایجاد کند.
در نتیجه، پیشنهاد میشود Reflection تنها در مواردی مورد استفاده قرار گیرد که واقعاً به تحلیل یا رفتار پویا نیاز داریم، نه برای انجام کارهای سادهای که میتوان با روشهای معمول انجام داد.
در بخش بعدی، به صورت گامبهگام با کلاسهای مختلف Reflection در PHP آشنا خواهیم شد و یاد میگیریم چگونه از آنها برای ساخت ابزارها و سیستمهای پویا استفاده کنیم.
🔖 #PHP, #پی_اچ_پی, #reflection
👤 AmirHossein
💎 Channel: @DevelopixPHP
Repost from | Erfan's Notes |
حدودا یک ماه از ریلیز شدن نسخه 3.0 وباسمبلی (WASM) میگذره و الان فرصت کردم درموردش بخونم، تغییرات مهمی که داشته رو پایین مینویسم.
💠 پشتیبانی از Address Space های 64 بیت
تا قبل از این نسخه، وباسمبلی محدود به آدرسهای i32 بود و نمیتونست بیشتر از 4GB رو آدرسدهی کنه، ولی پشتیبانی از i64 اضافه شده و این محدودیت عملا بینهایت شده، هرچند که همچنان مرورگرها حداکثر اجازه allocate کردن 16GB رو میدن.
💠 پشتیبانی از Memory های چندگانه
تا قبل از این نسخه، هر ماژول وباسمبلی فقط محدود به یک Memory بود و برای تفکیک باید ماژولها Split میشدند، ولی در این نسخه قابلیت داشتن Memory های متعدد برای یک ماژول اضافه شده.
💠 پشتیبانی از Garbage Collection
در این نسخه یک افزونه با عنوان wasm-gc اضافه شده که در سطوح پایین میتونه مموری رو بهصورت خودکار مدیریت کنه، کامپایلرها میتونند Struct ها و آرایهها و بعضی Integer ها رو به صورت تگ شده تعریف کنند و خود wasm وظیفه allocation و lifetime شون رو برعهده بگیره.
💠 پشتیبانی از Tail Call ها
قابلیت Tail Call به وباسمبلی اضافه شده، این ویژگی از زبانهای فانکشنال الگو گرفته، به این معنی که فانکشنها میتونند در آخرین اکشنشون یک فانکشن دیگهای رو کال کنند بدون اینکه فضایی از Stack رو اشغال کنند، این موضوع در کال های Recursive اهمیت زیادی داره.
💠 پشتیبانی از Exception ها
پشتیبانی از Exception های try و catch در وباسمبلی اضافه شده، تا قبل از این برای چنین کاری باید از JS استفاده میشد.
💠 پشتیبانی از String های جاوا اسکریپت
قابلیت رد و بدل کردن مستقیم String های جاوا اسکریپت بدون نیاز به تبدیل دو طرفه اضافه شده، میتونید مقادر String رو به صورت مستقیم بهعنوان externref پاس بدید و سمت wasm تغییرات لازم رو روش اعمال کنید و سمت JS تحویل بگیرید.
و البته کلی قابلیت دیگه که اگر دوست داشتید میتونید اینجا بخونید.
یه مورد جذاب توی php رو باهم یاد بگیریم :)
توی php 8 به بعد یه ویژگی اضافه شده که شما میتونید هر کدوم از پارامتر فانکشن رو مقدار دهی کنید بزارید از روی تصویر و مثال بگم که بهتر متوجه بشید
ما یه function login داریم که چند تا ورودی میپذیره و دوتا از ورودی ها اپشنال هستن و مقدار دیفالت دارن حالا ما شاید میخوایم به اخرین مورد که مقدار دیفالت داره یه مقداری بدیم اون موقع چی؟
توی php های ورژن قبل مجبور بودیم همه رو مقدار دهی کنیم که به اون مورد برسیم یا که همون مقدار دیفالت رو بهشون بدیم (لاین 8)
اما توی php 8 یه فیچر اضافه شده که شما میتونید با زدن اسم متغییر و یک دو نقطه جلوش مقدار دهی کنید
جوری که توی لاین 14 میبینید
چند تا نکته داره
اگه از این مدل مقدار دهی استفاده کنید باید از اون به بعد رو هم به همین شکل مقدار دهی کنید
همون اسم متغییر رو میزنیم فقط بدون $
** توی فانکشن های خود php هم میتونید از این مورد استفاده کنید و لذت ببرید :))
👤 Matin Soleymani
💎 Channel: @DevelopixPHP
Repost from Quera
کوئرا جامعه برنامهنویسان ایران⌛️۵۰درصد تخفیف فقط تا ۲۴ ساعت بهترین فرصت شروع PHP 📚 دوره پروژهمحور برنامهنویسی وب با PHP (آموزش تفکر شیگرایی، امنیت، پایگاهداده، مفاهیم وب و ...) 👨🏻💻 با توسعهی پروژههای واقعی شرکت دیجیکالا 👩🏻💻 ⏺ کاملا آنلاین با امکان پرسش و پاسخ با مدرسان دوره کد تخفیف: iirf7h7 ☑️ آشنایی بیشتر با دوره و پیش ثبتنام رایگان: 🔗 https://quera.org/r/49xv9 ➖➖➖➖➖➖➖ @Quera_ir
یه چیزی که از php8 اضافه شده و چیز خفنیه همین تعریف پراپرتی ها هست
در پی اچ پی های قدیمی تر روند این بود که توی کلاس Car میبینید پراپرتی ها تعریف میشد و در کانستراکتور مقدار دهی میشد
اما در پی اچ پی هشت به بعد یه روش جدید اومد که کد های مارو کوتاه تر میکنه مثل کلاس Car2
میبینید که پراپرتی ها تعریف نشدن و توی ورودی کانستراکتور هم تعریف و هم مقدار دهی میشن !
که این باعث میشه کد های ما کوتاه تر بشه
و هیچ تغییری توی خروجی ها نداریم
نکته حائز اهمیت این هست که توی Interface ها و توی abstract function ها نمیتونیم از این ویژگی استفاده کنیم :)
👤 Matin Soleymani
💎 Channel: @DevelopixPHP
Repost from | Codilo |
🍉 یلدای امسال رو کُدیلویی بگذرونید!
🍓 تا پایان روز جمعه با دعوت دو کاربر جدید به کدیلو، فایل های کدیلو رو رایگان دریافت کنید
🥝 یلدای خوبی داشته باشید (:
💎 @Codilo
🤔 میدونستید با php میتونید تگ های html بسازید؟
با استفاده از کلاس DOMDocument این کار امکان پذیر هست
😍 کد بالا بسیار خوانا و ساده نوشته شده برای درک این موضوع
👤 Matin Soleymani
💎 Channel: @DevelopixPHP
یکی از نکات بسیار مهمی که تقریبا در تمامی زبانها وجود دارد ولی برنامهنویسان از آن آگاه نیستند، منطق اجرای حلقهها میباشد
در تصویر بالا میتوانید ببینید که دو کد مشابه، که اکثرا هم حالت اول آن را مینویسیم، چقدر میتواند باعث غیربهینه بودن کد شود
نکته مهم این پست اینجاست که تمامی کد های داخل condition حلقه، در هر iteration اجرا میشوند و اگر حلقهتان از توابع داینامیک مثل count یا … استفاده میکند، در هر iteration شما آرایه را count میکنید که این بهینه نیست
💎 Channel: @DevelopixPHP
یکی از کمبود هایی که در زبان PHP بهعنوان یک زبان برنامهنویسی مدرن امروزی حس میشود، کتابخانههای مرتبط با هوش مصنوعی و یادگیری ماشین است
در راستای جبران این کمبود، کتابخانه RubixML یکی از اولین کتابخانه های Machine Learning و Deep Learning در این زبان است
این کتابخانه دارای ساختار OOP و Developer Friendly برای توسعهدهندگان PHP است
همچنین در حال حاضر بیش از 40 الگوریتم یادگیری نظارت شده و غیرنظارت شده را پشتیبانی میکند
از ETL و پیشپردازش و چندگانهسنجی هم پشتیبانی میکند
در حالت کلی، یکی از کاملترین کیتهای یادگیری ماشین برای PHP است و از Pipeline ها پشتیبانی میکند و دارای Tokenizer های متنوعی است
البته قابل ذکر است که در مقایسه با کتابخانههایی مثل Tensorflow یا ML.net مانند مقایسه 206 با لندکروز عمل میکند و جای توسعه و پیشرفت زیادی دارد
همچنین در حال حاضر Tokenizer های قدرتمندی برای زبانهای یونیکدی مثل فارسی ندارد و باید خودتان پیادهسازی کنید
با این حال، وجود و توسعه چنین کتابخانهای برای PHP خبر خوبی است و آیندهای روشن دارد
💎 Channel: @DevelopixPHP
اوپن سوله (OpenSwoole) یک Extension بسیار قوی و کارآمد برای PHP است
در واقع OpenSwoole یک مکمل و SuperCharge کننده برای PHP است و قابلیتهایی که PHP همیشه کمبود داشته را به PHP اضافه میکند
از جمله قابلیت های OpenSwoole:
وبسرور HTTP بسیار قدرتمند و سریع با توانایی هندل کردن چندین هزار درخواست بر ثانیه (حداقل 10 برابر بیشتر از وبسرور داخلی PHP)
پشتیبانی از کو روتینها (Coroutine) در PHP و ممکن کردن برنامهنویسی Async
پشتیبانی از Hook های متعدد برای قابلیت های built-in خود PHP از جمله CURL و MySQL و …
پشتیبانی از برنامهنویسی MultiProcess و MultiThread و Async
پشتیبانی از gRPC و قابلیت پروتکلنویسی
قابلیت برنامهنویسی Event Driven و ریختن قیمه JS ها توی ماست PHP ها
و کلی قابلیت دیگه
به صورت خلاصه، اگر PHP کار میکنید و هنوز از OpenSwoole استفاده نمیکنید، دارید کلی مزیت رو از دست میدید
💠 گروه OpenSwoole
💎 Channel: @DevelopixPHP
معمولا در PHP برای سر و کله زدن با String ها از متد های خانواده str استفاده میکنیم
مثلا برای گرفتن اندازه رشته، از متد
strlen و برای پیدا کردن مختصات یک کاراکتر از strpos و به همین ترتیب برای سایر موارد نیز از سایر متد های خانواده str استفاده میکنیم
نکتهای که حائز اهمیت است، این است که استفاده از متد های str برای کاراکتر های Unicode و UTF توصیه نمیشود
چرا که متد های str به صورت خالی با byte سر و کار دارند
مثلا ایموجیها را در نظر بگیرید، ایموجیها معمولا 3 بایت حجم اشغال میکنند، به این علت که شکل نمایشی آنها با شکل نوشتاری آنها متفاوت است
مثلا strlen برای ایموجی 😒 معادل 3 است، ولی mb_strlen آن معادل 1 است
از جمله دلایلی که validate کردن length یا سر و کله زدن با String های یونیکدی و UTF ای را در PHP پیچیده میکند، نداشتن درک درمورد توابع MB است
به صورت خلاصه، اگر سر و کارتان با byte های یک String است، توابع str برای شما کفایت میکند
ولی اگر با متن های غیرساده سر و کار دارید، استفاده از متد های MultiByte یک ضرورت است، هرچند که چندین برابر کندتر است
💎 Channel: @DevelopixPHPیکی از مرسومترین متد هایی که برای تولید اعداد تصادفی در PHP از اون استفاده میکنیم، متد
rand هست
متد rand با وجود استفاده زیاد، تقریبا منسوخ و غیربهینه محسوب میشه و بهصورت drop-in میتونیم با متد جدیدتری بهاسم mt_rand جایگزینش کنیم
متد mt_rand از الگوریتم Mersenne Twister استفاده میکنه که حدودا 4 برابر سریعتر از الگوریتم مورد استفاده rand هست
ولی با اینحال، هیچ یک از متد های rand یا mt_rand ایمن نیستند و به اصطلاح cryptographic secure نیستند، در اصل با پی بردن به seed اولیهشون میشه کل بازی رو در دست گرفت
برای همین اگر نیاز به تولید اعداد رندوم cryptographic دارید، توصیه میکنم از متد های random_int و random_bytes استفاده کنید، که معمولا چندین برابر کندتر از جنریتور های بالا هستند، ولی امنیت بهتری دارند
💎 Channel: @DevelopixPHP