دسته: PHP

  • دوره‌ی آموزش سریع لاراول

    دوره‌ی آموزش سریع لاراول

    بعد از حدود ۱۰ سال کار با لاراول، الان حس میکنم زمان خوبیه که یکم در موردش حرف بزنم و اول آموزشش بدم و بعد اگه شد بیشتر در مورد نحوه‌ی استقرار پروژه و کلی چیزای دیگه حرف میزنم. ویدیو ها بصورت رایگان توی این کانال یوتوب منتشر میشه و کد پروژه ای که کار میکنیم هم توی این ریپازیتوری میتونید ببینید. این داکیومنت تا خیلی مدت دیگه بروز میشه و فعلا در حد یه پیش نویس هست که قسمت های مختلف آموزش رو روی این پست آپدیت میکنم. سورس کد قسمت های مختلف این دوره رو میتونید با تگهایی که توی این ریپازیتوری هست ببینید.

    نصب لاراول با داکر روی مک

    توی ویدئوی اول در مورد نصب و شروع کار حرف زدم. تک تک سیستم عامل ها رو نمیتونستم برو و بگم ولی میتونید با داکر پروژه رو خیلی سریع بالا بیارید. هدف از این دوره اینه که خیلی سریع بدون اینکه ویدیو رو بزنید جلو کار رو یاد بگیرید. من برای نصب لاراول روی مک از این کامند استفاده کردم:

    curl -s "https://laravel.build/laravel-mentor" | bash

    ولی شما میتونید از ابزارهای دیگه ای که موجود هست مثل این ابزارها هم استفاده کنید. ابزارهای موجود روی ویندوز:

    برای مک هم جدا از داکر میتونید از لاراول هرد استفاده کنید که توسط کامینیوتی خود لاراول توسعه داده میشه. کاربرهای لینوکس هم که خودشون بلدن چیکار کنن و معمولا همون داکر بهترین گزینه هست واسشون. اینجا میتونید بصورت ویدیویی توضیحاتم رو ببینید:

    نصب لاراول روی مک و سایر سیستم عامل ها

    تعریف مسیرها در لاراول

    در بخش دوم در مورد مسیر ها حرف زدم و اینکه چطور میشه مسیرهای به سبک مدرن تعریف کرد. این روزا دیگه خبری از مسیرهای شلوغ و طولانی نیست و توسعه دهنده ها سعی میکنن مسیرها با معنی و تمیز باشن. حتی طراح های محصول روی هم روی این قضیه حساس تر شدن و واسشون مهمه که آدرسی که فردا برای مارکتینگ میخوان بفرستن تمیز و معرف محتوای صفحه باشه. مثلا ما وقتی این آدرس رو میبینیم به راحتی میتونیم حدس بزنیم اون تو چه خبر میتونه باشه.

    https://github.com/pricing

    توی ویدیو میتونید نحوه ی تعریف مسیرهای ساده در لاراول رو ببینید:

    نحوه ی تعریف مسیر ها در لاراول

    دستوران خط فرمان (CLI tools) در لاراول

    توی لاراول یه فایل داریم به اسم artisan که باهاش میشه دستورات کامند لاینی اجرا کرد. در واقع یه ابزار خط فرمانی هست که میشه فیچر های مختلف لاراول رو باهاش تولید کرد یا یسری چیزها رو دید. مثلا دستور زیر به ما لیست مسیر های توی پروژمون رو میده:

    sail artisan route:list

    آرتیزان کلی بهتون امکانات میده که باهاشون میتونید کارای مختلف بکنید ولی بازم ممکنه یه کامندی نیاز داشته باشید که توی لاراول وجود نداره. اون موقع خودتون میتونید دست به کار بشید و کامند خودتون رو بسازید. توی این ویدیو این اینترفیس رو معرفی کردم و در موردش بیشتر توضیح دادم.

    کار با دستور artisan در لاراول

    سورس رو روی گیتهاب ببینید

    داشتم به این فکر میکردم که یه روشی داشته باشیم که من کدهای هر جلسه رو چطوری بهتون بدم؟ گیت و گیتهاب گزینه ی خوبیه ولی مشکل این بود که اگه هر روز کد رو آپدیت میکردم شما دقیقا کد مریوط به جلسه ی خاص رو نداشتید. از طرف دیگه توی این روزا کسی حوصله ی دانلود و اکسترکت کردن فایل zip رو نداره. بخاطر همین شاید بهترین کار اینه که کد مربوط به هر جلسه رو با یه تگ مشخص روی گیت بذاریم. اینجوری میتونید همون بالا کد رو چک کنید با کامندی که میخواید دانلود کنید. توی این جلسه در مورد این حرف زدم.

    چطور در لاراول ویو تعریف کنیم؟

    سوالی هست که توی ویدیوی بعدی در موردش حرف زدم. ویوها یکی از بخش ها مهم فریمورک لاراول هستن که یه فریمورک MVC هست. یه چیزی مثل وردپرس رو اگه باهاش کار کرده باشید، تمی که روش نصب میکنید یجورایی توی لاراول بهش میگن ویو. در واقع توی ویوها خروجی های html رو رندر میکنیم.

    تعریف ویو در لاراول

    جلوگیری از تکرار در blade و با لاراول

    فرض کنید که میخواید کلی صفحه ی blade داشته باشید که هر کدوم کلی چیز میز تکراری دارن. توی دنیای پی اچ پی پیور مخصوصا اگه تازه کار هستید خیلی چالش دارید که بخش های تکراری رو حذف کنید و فقط یجا داشته باشید. لاراول با فیچرهایی مثل yield و extends این مدل مشکلات رو خیلی شیک و تر و تمیز حل کرده. توی این ویدیو در مورد این داستانا حرف زدم

  • برنامه نویس ربات تریدر ارزهای دیجیتال و فارکس

    برنامه نویس ربات تریدر ارزهای دیجیتال و فارکس

    این روزا ارزهای دیجیتال خودتون میدونید دیگه 🙂 یسری ها هستن که دارن توی زمینه ی ارزهای دیجیتال کار میکنن و روز و شب پای سیستم هستن که یه نونی بیارن سر سفره. منتها این کارم سختی های خودشو داره. یکی از سختی هایی که داره اینه که این بنده خدا ها صب تا شب باید توی نمودار بالا پایین بشن که ببینن آیا نمودار قط کرد یا نکرد! مورد بعدی ای که هست اینه که باشه اصلا صب تا شبم طرف بشینه پای سیستم باز میرسه به یجایی که قط میکنه ولی دلش نمیاد بفروشه تا اصطلاحا تخم نمیکنه بخره! بعدن میبینه که ضرل کرده و دیگه اون موقع دیره. این دوستان میگن اگه بشه ۱. صب تا شب پای سیستم باشیم و ۲.استراتژی خوبی بچینیم و نهایتا ۳.احساسی عمل نکنیم اونوقت احتمالا میشه سود کرد توی این بازار.

    ربات خرید و فروش چه کمکی میتونه بکنه؟

    این تیتر رو بیشتر برای سئو زدم و اصلا مهم نیس و قطعا شما دیگه میدونید که ربات میتونه همه ی اون مشکلاتی که گفتم رو حل کنه. ینی هم ۷ روز هفته و ۲۴ ساعت شبانه روز پای سیستمه اگه سرور ۹۹.۹۹٪ آپتایم داشته باشه. از اونور استراتژی های مختلف هم اگه توی ربات تعریف بشه باز این مشکل هم به مرور زمان حل میشه و شما راه رو پیدا میکنید. نهایتا ربات که با صفر و یک کار میکنه احساسات نداره خداروشکر. لذا این روزا این آدما نیاز شدیدی دارن که یه ربات داشته باشن. در ادامه میخوام در مورد اینکه برای نوشتن ربات چیا باید بلد باشیم هم صحبت میکنم.

    ابزارها و زبان های لازم برای نوشتن ربات تریدر

    برای نوشتن ربات باید اطلاعات خوبی در زمینه ی برنامه نویسی بکند داشته باشید. در واقع شما باید بتونید از API صرافی های مختلف سر در بیارید و بعد ازشون دیتا بگیرید و نهایتا بتونید درخواست سفارش های خودتون رو روی صرافی های مختلف ثبت کنید. بعنوان نمونه میتونید صرافی های زیر رو چک کنید.

    بایننس بزرگترین صرافی ارز دیجیتال در دنیا

    برای ارسال درخواست به این API ها میتونید از یک زبان برنامه نویسی مثل PHP یا پایتون استفاده کنید یا حتی میتونید برای شروع از ابزارهایی مثل Postman استفاده کنید. اگر با یک زبان برنامه نویسی کار میکنید برای اینکه کد شما همیشه بالا باشه باید یه سرور داشته باشید و برای اینکه داده ی خودتون رو روی سرور ذخیره کنید باید یک نرم افزار مدیریت دیتابیس مثل MySQL داشته باشید.

    استفاده از Trading View برای نوشتن ربات

    تریدینگ ویو یه سایته که یکی از کاراش اینه که به شما چارت میده که میتونید با اون چارت ها استرتژی های خودتون رو مدل کنید. تریدینگ ویو یه چیزی داره به اسم alert که شما میتونید روی نمودار ها اعلان ست کنید که وقتی شرایطی که مد نظر شماست اتفاق افتاد برای شما اعلان ارسال بشه. این اعلان ها میتونن بصورت web hook باشن. ینی به سرور شما درخواستی ارسال کنن. نهایتا حتی شما میتونید استرتژی ها رو با زبان Pine که یه زبان برنامه نویسی مخصوص خود تریدینگ ویو هست بنویسید و اعلان ها واستون ارسال بشن. ینی لازم نیست شما داده رو بگیرید و پردازش کنید. استراتژی رو بصورت ویژوال میچینید و خرید و فروش اتوماتیک روی صرافی مد نظرتون انجام میشه.

    جمع بندی

    بصورت خلاصه این یک مطلب کلی در مورد مسیر بود. شما میتونید در مورد تک تک این موضوعات سرچ کنید و ربات خودتون رو بنویسید. البته مد نظر داشته باشید که بجز دانش برنامه نویسی باید بتونید استراتژی خوب بچینید که منجر به چیزای خوب بشه. و نکته ی دیگه ای که بازم مهمه داشتن سرمایه هست دیگه. شما بهترین استرتژی رو هم داشته باشی بدون سرمایه خطریه 🙂

    اگه نیاز به برنامه نویسی دارید که همه ی اینارو داره (بجز سرمایه) با ما تماس بگیرید.

  • آرگومان های با نام یا named arguments در PHP

    آرگومان های با نام یا named arguments در PHP

    تصور کنید که یه تابع به این صورت دارید که دو تا پارامتر اختیاری داره که مقدار پیشفرض رو توی ورودی تابع واسشون تعریف کردیم:

    function test($x = 1, $y = 2) {
        var_dump($x, $y);
    }

    اگه مقدار اول رو نیاز داشته باشیم پاس بدیم بهش و دومی رو ندیم همه چی اوکیه و برای متغیر دوم مقدار پیشفرض ست میشه:

    test(3);
    
    // Output:
    int(3)
    int(2)

    ولی از اونجایی که توی PHP آرگومان ها باید به ترتیب ارسال بشن نمیتونیم بگیم که مقدار اولی دیفالت باشه یا اون رو ازش بگذر و برو دومی رو مقدار دهی کن. یا باید آپشناله آخرین آرگومان باشه یا باید همون مقدار دیفالت رو مثلا دوباره بهش بدیم. خوشبختانه از ورژن PHP 8 توی این آر اف سی، این امکان اضافه شد که بشه آرگومان ها رو با نام فرستاد. ینی میتونیم به این صورت عمل کنیم:

    
    <?php
    
    function test($x = 1, $y = 2) {
        var_dump($x, $y);
    }
    
    
    test(y:3);
    
    // Output:
    int(1)
    int(3)
    

    جاهایی که تعداد زیادی متغیر اختیاری داریم خیلی به درد میخوره این مدل فراخوانی تابع.

    منابع:

  • ارسال با رفرنس در PHP

    ارسال با رفرنس در PHP

    توی پی اچ پی بجز اشیا بقیه ی مقادیر پریمیتیو هستند و رفرنس تایپ نیستن. ینی شما مثلا وقتی یه آرایه رو به یک آرایه دیگه assign میکنید اون دو تا آرایه جاهای جدا از حافظه رو اشغال میکنن و طبیعی هست که تغییر یکی روی اونیکی اثری نذاره. یه مثال ساده:

    <?php
    
    $numbers = [1, 2, 3];
    
    $anothers = $numbers;
    
    $anothers[1] = 5;
    
    var_dump($numbers);
    
    // Output:
    
    array(3) {
      [۰]=>
      int(1)
      [۱]=>
      int(2)
      [۲]=>
      int(3)
    }

    اشیا اینطور نیستن و میشه توی این مثال راحتتر منظورم رو برداشت کرد:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 2"

    برای اینکه اشیا رو ازشون کپی بگیریم خیلی راحت ازش clone میگیریم:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = clone $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 1"

    پریمیتیو ها رو هم میشه مثل رفرنس اساین کرد به یه علامت & قبل از متغیری که میخواد اساین بشه:

    $a = 2;
    $b = &$a;
    $b++;
    var_dump($a);
    
    // Output:
    int(3)

    و نهایتا اگه بخوایم چیزی که primitive هست رو بصورت رفرنس ارسال کنیم یه علامت & قبل از اسمش میذاریم. به این صورت:

    $x = 3;
    
    function change(&$x) {
        $x++;
    }
    
    change($x);
    
    var_dump($x);
    
    // Output:
    
    int(4)

    توی یه سری زبون ها نیازه که جایی که کال میکنیم هم علامت رو بذاریم ولی توی پی اچ پی فقط توی ورودی تابع بنویسیم کافیه.

    امیدوارم به دردتون بخوره.

  • عملگرهای اجرایی در PHP

    عملگرهای اجرایی در PHP

    توی پی اچ پی با این تابع میشه یچی روی توی شل ران کرد:

    shell_exec(string $command): string|false|null

    یه راه سریع تر و قشنگ تر برای این هم هست که اینجوریه که شما کامند رو توی بک کوت میذارید و خود به خود ران میشه واستون. مثلا کد زیر رو اگه ران کنید واستون خروجی ls -a رو میده:

    <?php
    
    $output = `ls -a`;
    
    echo "<pre>{$output}</pre>";

    که واسه من چیزی شبیه اینه:

    .
    ..
    alpine.html
    backticks.php
    index.html
    integ.py
    php_io.php
    venv

    شاد باشید 🙂

  • اصلاح جدول‌های لاراول بعد از migrate کردن

    اصلاح جدول‌های لاراول بعد از migrate کردن

    حتما اگه مدتی با لاراول کار کرده باشید میدونید که مایگریشن های لاراول چیزای خطرناکی ان 🙂 از این جهت که ممکنه یه چیزی رو مایگریت رول بک کنید و داده ای که دارید رو از دست بدید. خب سوالی که پیش میاد اینه که پس چجوری فیلد ها رو ادیت کنیم؟ داکیومنت مایگریشن خود لاراول پکیج doctrine/dbal رو پیشنهاد میکنه برای اینکه تغییرات رو روی جدول ها انجام بدیم.

    فرض کنید اول کار من یه فیلد از مایگریشن ام رو اینجوری درست کردم:

    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title', 500);
        $table->text('body')->nullable();
        $table->timestamps();
    });

    حالا میخوام به جدول یه فیلد دیگه اضافه کنم به اسم published. برای این کار به صورت زیر عمل میکنم که اول یه مایگریشن درست میکنم:

    php artisan make:migration alter_posts_add_published_field

    و بعد توی متد up کاری که میخوام رو انجام میدم:

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->nullable();
    });

    با مایگریت کردن مجدد تغییراتی که دادید اعمال میشه. حالا فرض کنید همین فیلد آخری رو میخواید مقدار default واسش بذارید. برای تغییر در فیلدهای موجود پکیج زیر رو نصب کنید:

    composer require doctrine/dbal

    یه مایگریشن جدید درست میکنید:

    php artisan make:migration alter_posts_add_default_value_to_published_field

    و از فانکشن change برای اعمال تغییرات استفاده کنید:

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->default(0)->change();
    });

    اگه تابع change رو نذارید خطای زیر رو میگیرید چون فکر میکنه که دارید فیلد رو اضافه میکنید:

    SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'published' (SQL: alter table `posts` add `published` tinyint(1) not null default '0')

    اگه تابع change رو بذارید آخر مایگریشن ولی dbal نصب نباشه این خطا رو میگیرید که اینم مشخصه چی میگه:

    Changing columns for table "posts" requires Doctrine DBAL. Please install the doctrine/dbal package.

    نکته ی دیگه ای که باید مد نظر داشته باشیم اینه که اگر مثلا یه کلید خارجی دارید اضافه میکنید باید حواسمون باشه که کلید خارجی و لوکال با هم compatible باشن که البته این نکته توی ساخت همون مایگریشن ها هم مهمه دیگه.

    اگه دیدید خیلی مایگریشن هاتون زیاد شدن میتونید با این فیچر از شرشون خلاص بشید.

    موفق باشید 🙂

  • توابع func_get_args و …$args در PHP

    توابع func_get_args و …$args در PHP

    یسری چیزا توی PHP هست که توی کورس های مختلف نمیبینیمشون ولی اگه بدونیم بعضی جاها خیلی به دردمون میخوره. این تابعی که معرفی میکنم رو خودم امروز دیدم و البته شاید یکم دیره برای دیدن این تابع چون جدیدن یه تابع دیگه هم توی ورژن جدید پی اچ پی اومده که همین کار رو میکنه تقریبا. اولی تابع func_get_args() هست که اگه کالش کنیم ورودی های تابع رو توی یه آرایه بهمون تحویل میده. کد و خروجیش رو ببینید قطعا خیلی راحت متوجه میشید:

    <?php
    
    function test() {
        return func_get_args();
    }
    
    var_dump(test("First arg", "Second arg"));

    خروجی کد بالا بصورت زیر هست:

    array(2) {
      [۰]=>
      string(9) "First arg"
      [۱]=>
      string(10) "Second arg"
    }

    یه تابع دیگه که مشابه همین تابع هست بدون s آخرش و بصورت func_get_arg() هست که یه ورودی عددی میگیره و آرگومان اون ایندکس رو برمیگردونه. تابع func_num_args() هم تعداد آرگومان های ورودی تابع رو برمیگردونه.

    یک نمونه ی استفاده از داینامیگ آرگومان ها رو در زیر میبینید:

    <?php
    function average(){
        return array_sum(func_get_args())/func_num_args();
    }
    echo average(10, 15, 20, 25); // 17.5

    روش دوم برای گرفتن آرگومان های با تعداد متغیر در PHP استفاده از سینتکس … هست که یک نمونه از استفاده ی اون رو در زیر میبینید:

    <?php
    function sum(...$numbers) {
        $acc = 0;
        foreach ($numbers as $n) {
            $acc += $n;
        }
        return $acc;
    }
    
    echo sum(1, 2, 3, 4); // 10

    امیدوارم به دردمون بخوره 🙂

  • تدریس خصوصی برنامه نویسی شئ گرا در PHP

    تدریس خصوصی برنامه نویسی شئ گرا در PHP

    برای یادگیری عمیق PHP نیاز به درک عمیقی از Object Oriented Programming دارید. در این دوره به شما خواهم آموخت که چطور شی گرا کد بزنید. در این دوره با مفاهیم زیر آشنا خواهید شد.

    کلاس ها در پی اچ پی

    کلاس ها الگوهایی هستند که ویژگی ها و رفتار های یک موجودیت رو داخل خودشون دارن. به عبارت دیگه کلاس یک قالب یا نقشه (‌Blueprint) از یک چیز است. اسم کلاس ها رو معمولا بصورت اسم مینویسم. یک کلاس ساده را در زیر میبینید.

    
    class Person {
        public $name;
        public $age;
        public function __construct($name, $age) {
            $this->name = $name;
            $this->age = $age;
        }
        public function introduce() {
            echo "Hi, I'm $this->name and I'm $this->age years old.";
        }
    }

    اشیا در PHP نمونه های مختلفی هستند که از کلاسها درست میکنیم. یک نمونه از کلاس بالا را در زیر میبینید:

    $hamid = new Person("Hamid", 29);

    کلاسها میتوانند ویژگی های کلاسهای دیگر را به ارث ببرند. مثلا در زیر کلاس Student از کلاس بالا مشتق شده.

    class Student extends Person {
        public $class;
        public function __construct($name, $age, $class) {
            parent::__construct($name, $age);
            $this->class = $class;
        }
        public function introduce() {
            echo parent::introduce() . " I'm a Student. I'm at Class $this->class.";
        }
    }
    

    دوره آموزش خصوصی برنامه نویسی شی گرا در PHP

    سرفصل های آموزشی در این دوره به این صورت است.

    • کلاسها – classess
    • اشیا – objects
    • ارث بری یا inheritance
    • کلاسهای انتزاعی یا abstraction
    • کپسوله سازی یا Encapsulation
    • ترکیب و انتزاع اشیا
    • اصول برنامه نویسی سالید SOLID
    • آشنایی با design pattern ها

    بعد از این دوره شما قادر خواهید بود مباحث تخصصی در مورد الگوهای طراحی نرم افزار رو مطالعه کنید و با اصول SOLID در برنامه نویسی PHP آشنا بشید.

    برای کسب اطلاعات بیشتر از طریق واتساپ با من تماس بگیرید.

  • کار با Complex (curly) syntax در PHP

    توی زبون های مختلف وقتی با رشته ها کار میکنیم ممکنه بخوایم یه استرینگ رو مثلا اکو کنیم یا هر کار دیگه ای و داخل اون استرینگ یه متغیر هم باشه. توی PHP میتونید رشته رو توی دبل کوتیشن بذارید و رشته بصورت رندر شده داخل استرینگ نشون داده میشه. یه همچین چیزی منظورم هست:

    <?php
    $name = "Hamid";
    echo "My name is $name";
    
    // output: My name is Hamid

    ولی یسری مواقع هست که شما میخواید از یک آرایه ی Associative مقدار بکشی بیرون. فرض کنید از یه ریکوعست داده اومده واستون و میخواید داده ای که از $_GET اومده رو مستقیما توی رشته چاپ کنید. (این یه مثاله و قطعا توی این موارد بهتره validation انجام بشه).

    <?php
    
    echo "My name is $_GET['name']";
    
    // output: Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in strings.php on line 3

    توی همچین دو تا راه سخت دارید. یکی از سختا اینه که مقدار رو بیرون از رشته بگیرید داخل یه متغیر ذخیره کنید و بعد اونو بذارید داخل رشته که یدونه الکی متغیر هدر میره:

    <?php
    
    $name = $_GET['name'];
    echo "My name is $name";

    راه دوم سخت تر اینه که رشته ها رو بچسبونید به متغیر به این صورت که کار رو یکم سخت میکنه:

    <?php
    
    echo "My name is $name" . $_GET['name'];

    ولی راه قشنگتر اینه که از Complex (curly) syntax استفاده کنید که در میشه آرایه های Associative هم توی استرینگ مستقیم رندر کرد.

    <?php
    
    $user = [
        'name' => 'Hamid',
        'age' => 29
    ];
    echo "My name is {$user['name']} and I am {$user['age']} years old.";
    
    // output: My name is Hamid and I am 29 years old.

    میبینید که چقد شیک و ساده میشه اینکارو کرد توی ورژن های جدید PHP.

    شاد باشید 🙂