Global vs static variables in PHP

前端 未结 3 1358
梦谈多话
梦谈多话 2021-01-11 13:55

I\'m creating a basic framework in PHP. I need to pass data for the current page into different functions, allow them to modify and save it, and then pass it back to the pag

相关标签:
3条回答
  • 2021-01-11 14:47

    So, my question is, which would be better and why?

    You already sense that there is some problem putting this all into globals. Although you have developed some thoughts to encapsulate things into a class.

    I think that is a good starting point. Let's add some more spice to the cooking to get this more fluent at the beginning:

    $data = new ArrayObject(array());
    $data['page_title'] = 'Home';
    

    You have created an object now that you can pass along containing your data. Just pass $data to the area's where it's needed. No global or global static variable needed.

    You can even make that type more concrete later on by extending from ArrayObject with your own type.

    0 讨论(0)
  • 2021-01-11 14:48

    For the record.

    Pro of static:

    Clarity of the code. For example:

    function fn() { 
       System::data()
     }
    

    versus

    function fn() { 
       global $system;
       $system->data()
     }
    

    Cons of static:

    • If you are using psr-4 then you must add (and include) a new class (and a new file). It impacts the performance even if you use opcache (opcache aleviates it but it's not magic).
    • You must define a block of code.
    0 讨论(0)
  • 2021-01-11 14:55

    There really is no difference between a global variable and a public static variable. The class variable is namespaced a tiny bit better, but that hardly makes any difference. Both are accessible anywhere at any time and both are global state.

    As it happens, I just wrote an exhaustive article on the subject:
    How Not To Kill Your Testability Using Statics

    0 讨论(0)
提交回复
热议问题