• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP OOP Nie odczytuje zmiennej w klasie.

VPS Starter Arubacloud
0 głosów
722 wizyt
pytanie zadane 15 czerwca 2018 w PHP przez nielotweb Bywalec (2,240 p.)

Cześć,

Mam taką zagwostkę. Mam przykładową klasę, w tej klasie metodę ( funkcję ) i w tej metodzie pewną zmienną która pochodzi z innego pliku ( ta zmienna tworzy obiekt innej klasy ), i właśnie mam ten problem że nie czyta tej zmiennej, tak jakby nie istniała. I tu moje pytanie dlaczego nie można inicjować 'wrogich' zmiennych z innych plików do klas? W jaki sposób mogę zrobić aby zaczęło ją 'czytać'?

Napiszę przykład bo tłumaczyć nie umiem.

W jednym pliku mam przykładowo to:

require 'vendor/autoload.php';

$Request = new Request; // <- To jest ta zmienna

A w innym to:

class Login
{
    public function loginUser()
    {
        if ( self::findUser() === true && $this->userStuff->email === $this->emailLogin)
        {
            if ( $this->userStuff->password === $this->passwordLogin )
            {
                //Session id
                Session::putIntoSession('loginSession', $this->userStuff->id);

                //Session true
                Session::putIntoSession('loginCorrect', true);

                //Redricted to board
                $Request->sendTo('board');  // I TO NIE CHCE DZIAŁAĆ, TZN. NIE CZYTA TEGO
          
            }
        }

    }
}

Czyli nie chcę czytać mi tej zmiennej $Request, choć gdy dam ją na samą górę poza klasę Login, to ją normalnie czyta. Może mi ktoś to wytłumaczyć?;p 

Z góry dziękuję!

1 odpowiedź

+2 głosów
odpowiedź 15 czerwca 2018 przez HaKIM Szeryf (87,590 p.)
wybrane 19 czerwca 2018 przez nielotweb
 
Najlepsza

Login nie ma prawa wiedzieć o zmiennej Request, bo nie jest ona w jego zasięgu.

Jedno z wielu rozwiązań:

Dodaj w konstruktorze, dla klasy Login, parametr Request:

class Login
{
    private $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function loginUser()
    {
        if ( self::findUser() === true && $this->userStuff->email === $this->emailLogin)
        {
            if ( $this->userStuff->password === $this->passwordLogin )
            {
                //Session id
                Session::putIntoSession('loginSession', $this->userStuff->id);
 
                //Session true
                Session::putIntoSession('loginCorrect', true);
 
                //Redricted to board
                $this->request->sendTo('board'); 
            }
        }
    }
}

A w pliku z poniższym kodem:

require 'vendor/autoload.php';
 
$Request = new Request; // <- To jest ta zmienna

Stwórz obiekt Login wraz z parametrem $Request.

require 'vendor/autoload.php';
 
$request = new Request; // <- To jest ta zmienna

$login = new Login($request);

Co się tyczy innych rzeczy:

Mam przykładową klasę, w tej klasie metodę ( funkcję )

Właściwie to metodę. Wyjaśnienie "( funkcję )", nie powinno mieć tutaj miejsca, choćby z tego powodu, że jest mylące.

inicjować 'wrogich' zmiennych z innych plików do klas

Wrogich???

Btw. Login nie powinno mieć jakiegoś namespace'a, aby dołączanie autoload'a miało sens?

Jeśli jesteś twórcą tej klasy Request, to nie sądzisz, że nazwa metody "sendTo" jest myląca, choćby z prostej przyczyny, że sam wyjaśniłeś w komentarzu:

                //Redricted to board
                $this-request->sendTo('board');

Sugeruję zmienić jej nazwę na: redirectTo().

Poza tym polecam ten kurs, gdyż Twoje słownictwo ze świata obiektowego jest ubogie:

https://webmastah.pl/jak-programowac-obiektowo-cz-1-wstep/

Dzięki zapoznaniu się z nim, będziesz mógł z większą łatwością objaśnić swój problem, aby inni forumowicze mogli Ci lepiej pomóc.

if ( self::findUser() === true && $this->userStuff->email === $this->emailLogin)

Klasa Login nie powinna mieć statycznej metody o nazwie "findUser". Zadaniem klasy Login jest logowanie, tylko i wyłącznie. Aby nie zostawić Cię z problemem i sobie radź polecam przekazać parametry, które są potrzebne do zalogowania, podobnie, jak zrobiłem to z Requestem. Gdyby klasa Login przeistoczyła się kiedyś w metodę kontrolera o nazwie Authorization - Wyciągaj te dane z własności (property) private $request.

1
komentarz 15 sierpnia 2018 przez HaKIM Szeryf (87,590 p.)

Albo po prostu to efekt firmy w której te doświadczenia nabierałeś?

Jestem w stu procentach przekonany i mógłbym dowieść, że była to tylko i wyłącznie moja wina. Złe decyzje i brak odwagi, po prostu.

Ale już po tym widzę że Cię ciągnie jednak na ten zawód.

Hmm... Szczerze mówiąc, to już mam dość programowania. Za mało w nim adrenaliny. Ja czuję wewnętrzną potrzebę do podejmowania ryzyka, a programowanie nie jest w stanie tej potrzeby zaspokoić. Tak, nawet deployami w piątek! devil

Na bank chcę wykorzystać stosunkowo dobre zarobki programistów na rynku, aby dostarczyć sobie mocnych wrażeń, przez co programowanie byłoby fajną odskocznią i równowagą.

Mam dopiero 18 lat, w następnym roku matura i potem trzeba wybrać co będę robił w życiu. W sumie mam dwie opcje. Albo się kształtować, jak to teraz robię na programistę, albo na moją drugą zajawkę, grafikę komputerową. 

Rób to, co w długoterminowej grze przyniesie Ci przede wszystkim więcej szczęścia.

Zadałem to pytanie czy zawodowo siedzisz w php, bo chciałem się dowiedzieć czy warto :D 

Jeśli chodzi o: czy warto, bo będę przez to szczęśliwy: To zależy od tego czy lubisz programować. Dodatkowo, programowanie w biurze od tego w domu trochę się różni. Może dać Ci więcej frajdy, a może jest coś, czego nie znosisz i 8h ledwo co wytrzymujesz. Choć, na szczęście w tym zawodzie można pracować z domku. Sam musisz ustalić czy to dla Ciebie. cheeky 

Jeśli chodzi o pieniądze, to jak jesteś bardzo dobry technicznie oraz masz wysokie umiejętności personalne, a to właśnie takich programistów jest brak na rynku, to ogromne stawki będziesz zarabiał niezależnie od języka.

komentarz 16 sierpnia 2018 przez nielotweb Bywalec (2,240 p.)

Rób to, co w długoterminowej grze przyniesie Ci przede wszystkim więcej szczęścia.

I tu mam ten problem że sam nie wiem co mi daje więcej szczęścia. Programowanie jest spoko, bo mnie to jeszcze nie męczy, tylko nie wiem jak to będzie na dłuższą metę. Grafiką komputerową jarałem się od małego, w podstawówce już coś w gimpie skrobałem. W sumie to ja we wszystkim sił próbowałem, od muzyki po animacje 3D. Naprawdę wiele rzeczy próbowałem, ale wiele już odpuściłem bo stwierdziłem że już za późno na naukę nowej dziedziny :D Ale jednak chyba zostanę na razie przy programowaniu, grafice i jeszcze ostatnio zaczynam skrobać coś w modelingu 3D pod level design w grach - w sumie to jest pochodna grafiki komputerowej więc to jest to samo. 

Ale na co by nie patrzeć mam jeszcze czas na 'luźną zabawę' a potem na poważnie za coś się wezmę. Bo na pewno nie będę robił w życiu tego co mnie nie jara i mnie nudzi;p

Więc dzięki za te wartościowe dla mnie informacje! :D One serio dają do myślenia! 

komentarz 25 sierpnia 2018 przez nielotweb Bywalec (2,240 p.)
Cześć to znów ja;p Mam mały problem. Otóż gdy po wejściu na stronę otwiera się od razu box i trzeba go zaakceptować. Po zaakceptowaniu go ma się stworzyć ciasteczko że został zaakceptowany. Tylko mam ten problem że nie wiem jak to mogę ugryźć, bo działa to tak że po kliknięciu buttona z html ma się wywołać funkcja z klasy Cookies.

Czy tutaj potrzeba zasięgnąć ajaxa? Czy jakiś innym sposobem mogę to zrobić?
1
komentarz 25 sierpnia 2018 przez HaKIM Szeryf (87,590 p.)

Może założysz osobny temat do tego problemu? :D

Sądzę, że i tak za dużo tutaj pisaliśmy. cheeky

Tak, możesz użyć Ajax'a. Możesz również stworzyć Cookie w JS'ie po naciśnięciu na button "akceptuj".

komentarz 25 sierpnia 2018 przez nielotweb Bywalec (2,240 p.)
Masz racje, chyba zrobiliśmy jeden z dłuższych tematów na forum:P

Dobra to tak jak myślałem ajaxem spróbuję.

Podobne pytania

+1 głos
1 odpowiedź 177 wizyt
pytanie zadane 11 lutego 2022 w PHP przez ZnaQu Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 97 wizyt
pytanie zadane 26 kwietnia 2020 w PHP przez creend Gaduła (4,700 p.)
0 głosów
1 odpowiedź 278 wizyt
pytanie zadane 16 grudnia 2019 w PHP przez Piotr Jarema Użytkownik (970 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...