PHP vs C# i $this...

0

czy w PHP słowo kluczowe $this ma inne znaczenie lub inaczej się zachowuje niż w innych językach, np. C# i Javie?

tak sobie testuję i nie mogę zrozumieć , dlaczego zmusza się programistę do tak częstego używania tego obiektu

O ile np. w C# mogę sobie napisać bardzo przejrzyście bez użycia this, po prostu klasa widzi że to są jej zmienne

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person("Jan", "Kowalski");
            p.Show();
            Console.ReadLine();
        }
    }

    class Person
    {
        private string name;
        private string surname;

        public Person(string n, string sn)
        {
            name = n;
            surname = sn;
        }

        public void Show()
        {
            Console.WriteLine(name + " " + surname);
        }
    }

o tyle w php muszę tymi thisami rzucać na prawo i lewo, przez co kod jest dla mnie mniej czytelny

<?php

class Person
{
    private $name;
    private $surname;

    public function __construct ($n, $sr)
    {
        $this->name = $n;
        $this->surname = $sr;
    }

    public function Show()
    {
        echo $this->name." ".$this->surname;
    }
}

$p = new Person("Jan", "Kowalski");
$p->Show();

?>

w c# mogę zrobić np. coś takiego i kod działa, po prostu programista sam decyduje kiedy użyć tego obiektu (przeważnie się go używa, kiedy parametry funkcji mają tę samą nazwę albo jeszcze do przekazania "tej" klasy)

        public Person(string n, string sn)
        {
            this.name = n;
            surname = sn;
        }

        public void Show()
        {
            Console.WriteLine(name + " " + this.surname);
        }
1

W niektórych językach this / self jest wymagane (PHP, Rust), w innych nie; zależy od widzimisię projektanta ;-)
Zarówno jedno podejście, jak i drugie, ma pewne zalety oraz wady (bycie explicit vs bycie implicit vs wygoda użytkownika).

1

Sęk w tym, że dla wielu ludzi (np. mnie) kod z this w C# jest bardziej czytelny niż bez. Ale fakt, to jest opcjonalne słowo, jak komuś nie pasuje, to może sobie ustalić taką konwencję i tego słowa nie używać.

0

Z tego co wiem w PHP jeśli pominiesz $this to zaczynają się dziać bardzo ciekawe rzeczy.
Ale czekam na odpowiedź kogoś kto się wyznaje na OOP w PHP.

1

w PHP jeśli pominiesz $this to zaczynają się dziać bardzo ciekawe rzeczy.

Bez $this odwołujesz się do zmiennych lokalnych, nic specjalnie dziwnego: https://3v4l.org/m6WjL.

0

To wynika z historii języka. Z tego co wiem PHP nie zawsze miał klasy (chociaż wtedy jeszcze zjadałem swoje gile i robiłem babki z piasku, więc nie wiem czy tak na sto procent było). Jak je dodali, to pewnie łatwiej było im było zostawić istniejący mechanizm odwoływania się do zmiennych i dodać $this niż odwracać to, że jeżeli odwołujesz się do zmiennej i jesteś wew. klasy, to wtedy używane jest pole klasy, dodawać jakiś mechanizm rozwiązywania konfliktów (co jeżeli jest pole i zmienna o tej samej nazwie), co jeżeli nie jesteś w kontekście klasy, a używasz zmiennej (w php w odróżnieniu od Javy i C# kod może być pisany poza klasą) itd.

1

Z tego co wiem PHP nie zawsze miał klasy

Klasy w PHP pojawiły się ok. 20 lat temu w wersji 3.0. Jest to zasługa Gutmansa i Zuraskiego, którzy na potrzeby projektu uniwersyteckiego wykonali całkowity rewrite parsera.

Jeżeli kiedyś zastanawialiście się, skąd wzięły się klasy, język Simula 67 wprowadził je jako pierwszy. Koncepcja została opisana w książce Dahla, Dijkstry i Hoare z 1972 roku pt. Structured Programming:

"A procedure which is capable of giving rise to block instances which survive its call will be known as a class; and the instances will be known as objects of that class."

1 użytkowników online, w tym zalogowanych: 0, gości: 1