self vs. this у PHP

PHP підтримує класи та інші об'єктно-орієнтовані конструкції. ЯцеМоже використовуватися в статичних функціях Так Ні доступна змінна клас та методи з Я :: $ this-> (Зверніть увагу, що PHP> 5.3 дозволяє використовувати $ this зі статичними змінними, використовуйте $ this :: $ foo. $ this-> foo все ще буде невизначено, якщо $ foo - статична вар.) Потрібен об'єкт, який створений Ні Так

self vs this у PHP - Приклади

class exampleClass public static $ foo; публічний $ бар; публічна функція regularFunction () echo $ this-> bar;  публічна статична функція staticFunction () echo self :: $ foo;  публічна статична функція elseStatFn () self :: staticFunction ();  публічна функція regularFnUsingStaticVar () echo self :: $ foo;  // ПРИМІТКА: На основі PHP 5.3 використання $ this :: $ bar замість self :: $ bar дозволено exampleClass :: $ foo = "Привіт"; $ obj = новий прикладClass (); $ obj-> bar = "Світ!"; exampleClass :: staticFunction (); / * друкує Hello * / $ obj-> regularFunction (); / * друкує світ! * / 

Статичні функції можуть використовувати лише статичні змінні. Статичні функції та змінні посилаються через Я ::functionName () або Я ::зміннийНазви. У наведеному вище прикладі статичні змінні посилаються на ім'я класу (exampleClass :: $ foo) або з a Я :: (self :: $ foo) при використанні в статичному методі [з ім'ям staticFunction ()] класу.

Регулярні функції та змінні класу потребують посилання на контекст об'єкта. Вони не можуть існувати без об'єктного контексту. Об'єктний контекст забезпечується $ це. У наведеному вище прикладі $ bar є звичайною змінною, тому вона посилається як $ obj-> bar (в контексті об'єкта зі змінною obj) або як $ this-> bar (знову в контексті об'єкта в межах методу об'єкта).

Я не використовує попереднє $ оскільки Я не конотує змінну, а сама конструкція класу. $ це робить посилання на певну змінну, тому вона має попередню $.

Список літератури

  • Статичне ключове слово - PHP.net