Wpis z mikrobloga

Jak kurna zrobić, żebym po zainicjalizowaniu tej klasy uzyskał dostęp do zmiennych w tej funkcji? Zwraca ona wiele wartości, więc jeden return mnie nie zadowala... #php #programowanie

class Class {
public $test;
public $test2;

public function gg() {

$testdwas = 'bksd';
$this->test = $testdwas;

$this->test2 = $test2 = 'dddd';
}
}

Inicjalizuję to w innym pliku, wiadomo$class = new Class(); vardump($class);_ i mam wszędzie NULL. Podpowie ktoś? :(

Chcę uzyskać efekt, że inicjalizując klasę, będę mieć dostęp do wartości zmiennych z tej funkcji. Może jakoś inaczej to trzeba? Z góry wielkie thx za podpowiedzi.
  • 12
  • Odpowiedz
@khaotic: Przecież masz do nich dostęp - są publiczne.

To, że są nullami, to inna - oczywista - sprawa, bo im nie ustawiasz żadnej wartości. Metoda gg, która przypisuje im wartości sama się nie wywoła.

Jak chcesz mieć wartości od razu, to albo je ustaw przy deklaracji, albo w konstruktorze, ewentualnie wywołaj metodę, która te wartości ustawi. Zależy od konkretnego przypadku.
  • Odpowiedz
@JaTuSobiePatrze: Możesz przybliżyć, jakby to wyglądało w tym przypadku? Taki prosty przykład, żebym mógł zajarzyć. Bo gdy zrobiłem coś takiego to dostałem w ryj, że wysyłam puste argumenty:

public function __construct($test, $test) {
$this->test = $test;
$this->test2 = $test2
}

Z pamięci to napisałem, mogłem gdzieś się machnąć.

@zakopiak: Potrzebuję coś takiego, że metoda będzie przechowywać takie dane jak np. adres URL obecnej strony i takie tam pierdoły, zatem przypisanie
  • Odpowiedz
@khaotic: Metody są od wykonywania operacji, a nie przetrzymywania danych.
Tak czy inaczej jeśli z jakiegoś powodu chcesz dopiero w jakiejś metodzie przypisywać wartości publicznych atrybutów, to logiczne, że musisz tę metodę najpierw na obiekcie wykonać. Jednak wygląda to na kod wbrew wszelkim standardom obiektowego programowania.

Jak chcesz konkretów, to musisz dać konkretny, realny kod (np. na 3v4l.org). Z takim pseudo kodem dużo nie zdziałamy. Poza tym najwyraźniej tu problem masz
  • Odpowiedz
PS. Ja var_dumpowałem cały konstruktor klasy, więc powinno mi wszystko zrzucić, a zrzuca NULL-a.


@khaotic: Masz wyraźny brak zrozumienia tego, co robisz. "var dumpowałeś" obiekt.
Rozróżniasz klasę od obiektu?
  • Odpowiedz
@khaotic: czytam opis Twojego problemu i nazwę nick'u i już wiem jak ogólnie wygląda Twój kod. ( ͡º ͜ʖ͡º)

Generalnie jeżeli nie masz doświadczenia i chcesz, żeby Twoja jedna metoda zwracała wiele różnych typów danych to jest to bardzo zły początek. Od takich "akcji", gdzie chcesz zwracać różne rzeczy powinieneś mieć osobne metody. Gdybyś kiedyś chciał się uczyć testów to takiego gniota, który zwraca milion różnych
  • Odpowiedz
@ajgoron: metoda może zwracać wiele danych, wystarczy te dane opakować w jakąś strukturę (np. klasę) i nie utrudnia to testowania :)

@khaotic Lepiej na początek przeczytaj jakiś tutorial albo książkę OOP bo są braki w zrozumieniu co jest co :)
  • Odpowiedz
@bmLq No jasne. Rozwinięcie mojego koma (nie zdążyłem edytować bo napisałeś ;)):

Porady:
- samych dobrych nawyków nauczy Cię programowanie w PHP z twardym typowaniem. A więc na początku pliku declare(strict_types=1);, a potem trzymasz się tego, że wszystkie argumenty w metodach muszą mieć określony typ, tak samo określony typ powinny zwracać. Poczytaj dokumentację jakie typy są dostępne.
- dbaj o enkapsulację danych, czyli zawsze właściwości klasy (w Twoim przykładzie to np.
  • Odpowiedz
@bmLq: to co ja napisałem odnosi się do tego co kolega @khaotic prawdopodobnie miał na myśli. Jeżeli zwracane dane są opakowane w strukturę to jasne, że "dane" zwracane mogą być różne. Ale wśród początkujących (i nie tylko...) php-owców popularne jest to, że metoda zwraca wiele typów: w przypadku X zwróci array, w innym bool, a jeszcze w innym nulla. A tak metoda nie powinna wyglądać i takiego PR na code review
  • Odpowiedz