مشکل در ::static

پرسیده شده
فعالیت 1118 روز پیش
دیده شده 435 بار
0

سلام خسته نباشید

امکانش هست که در مورد  ::static 

توضیحاتی بدید و یا منبعی معرفی کند

چیز زیادی نتونستم در این مورد پیدا کنم

فایل پیوست

نیما جهان بخشیان
نیما جهان بخشیان

21 فروردین 00

2
حذف شده

قبل از اینکه بریم کد زیر رو برسی کنیم، کد شما داخل اون کلاس داخل متد ها و پراپرتی های static رو صدا میزنه که کاملا مشخصه

به کد زیر دقت کنید

<?php
    class Car
    {
        public static function run()
        {
            return static::getName();
        }

        private static function getName()
        {
            return 'Car';
        }
    }

    class Toyota extends Car
    {
        public static function getName()
        {
            return 'Toyota';
        }
    }

    echo Car::run(); // Output: Car
    echo Toyota::run(); // Output: Toyota
?>

شما فرض کنید که داخل دو تا کلاس متفاوت دوتا متد هم نام که static هستند رو دارید

توی کلاس Car که ما متد getName داریم، وقتی این متد رو صدا میزنیم کاملا مشخصه که خروجی ما Car هستش و اگه متد run رو هم صدا بزنیم خروجی ما Car هستش

 اما وقتی ما برای مثال توی کلاس Toyota اومدیم و کلاس Car رو ارث بری کردیم و چون متد run بین این دو مشترکه و دو تا متد دقیقا مثل هم به اسم getName وجود داره خروجی ها متفاوته، اما چرا؟

وقتی ما اومدیم داخل متد run متد getName به این شکل static::getName() صدا زدیم اومدیم گفتیم که اون getName رو فراخوانی کن که متعلق به همون کلاسه

ینی اینکه من وقتی متد run رو از Car صدا میزنم میره متد getName همون کلاس رو صدا میزنه و وقتی متد run رو توی کلاس Toyota صدا میزنم میره متد getName کلاس خود Toyota رو صدا میزنه

به این موضوع Late static binding گفته میشه

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

23 فروردین 00

0
حذف شده

سلام و احترام

به طور کلی اکه بخوام به شما توضیح بدم که static دقیقا چی کار میکنه، static این امکان رو به ما میده تا بدون اینکه از یه شئ ای، یه آبکجت بسازیم به یک یا چند تا پراپرتی یا متد دسترسی داشته باشیم، برای مثال

<?php
class Foo {
    public static function aStaticMethod() {
        // ...
    }
}

من برای اینکه متد داخل کلاس بالا صدا بزنم دیگه نیازی به ساختن شئ از اون کلاس ندارم، میبینید که کلمه کلید static بعد از public استفاد شده:

Foo::aStaticMethod();

یا مثلا پراپرتی که به شما گفتم:

Example #2 Static property example

<?php
class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

خیلی ساده میتونیم اون پراپرتی رو به شکل زیر صداش بزنیم:

Foo::$my_static 

https://www.w3schools.com/php/php_oop_static_properties.asp

https://www.php.net/manual/en/language.oop5.static.php

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

22 فروردین 00

حذف شده
ممنون و تشکر از شما مفهوم کلمه کلیدی static میدونم  من ::static رو نمیدونم که چرا و کجا باید استفاده بشه  مثل کد زیر class Queue { private static $instance; public static function getInstance() { if (static::$instance === null) { static::$instance = new Queue(); } return static::$instance; } }
نیما جهان بخشیان

22 فروردین 00

0
حذف شده

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


class Queue
{
   private static $instance;

   public static function getInstance()
   {
       if (static::$instance === null) {
           static::$instance = new Queue();
       }

       return static::$instance;
   }
}
فایل پیوست

نیما جهان بخشیان

توسط

نیما جهان بخشیان

22 فروردین 00