Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]protected z tablicy jak to ugryźć ?
casperii
post 22.06.2017, 21:37:54
Post #1





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


Panowie nie rozumiem do końca zasady protected.

  1. class JakasKlasa {
  2. protected $_session;
  3.  
  4. public function Logowanie() {
  5. $session = 'zmienna';
  6. $this->_session = $session;
  7. }
  8. }
  9.  
  10. try {
  11. $test = new JakasKlasa();
  12. $test->Logowanie();
  13. }


i jak wstawić w Logowanie tą $session ?

printowanie $test daje nam
  1. JakasKlasa Object
  2. (
  3. [_session:protected] => Array
  4. (
  5. [session-handle-part] => wartosc
  6. )
  7. )



w jaki sposób mam pobrać to co jest w session-handle-part ?

Ten post edytował casperii 22.06.2017, 21:38:13
Go to the top of the page
+Quote Post
viking
post 22.06.2017, 22:12:25
Post #2





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


public function getSession() {
return $this->_session;
}

$test->getSession()['session-handle-part];


--------------------
Go to the top of the page
+Quote Post
viking
post 22.06.2017, 23:06:22
Post #3





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Ciekawe http://sandbox.onlinephpfunctions.com/code...53abf4e4b8666aa

To znaczy że masz PHP jakiegoś starocia 5.3. Array dereferencing było od 5.4.

Ten post edytował viking 23.06.2017, 08:07:40


--------------------
Go to the top of the page
+Quote Post
vokiel
post 23.06.2017, 07:39:06
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Cytat(casperii @ 22.06.2017, 22:37:54 ) *
Panowie nie rozumiem do końca zasady protected.

Protected określa zasięg widoczności do danej klasy i klas po niej dziedziczących.

  1. class A
  2. {
  3. protected $foo;
  4.  
  5. public function getFoo()
  6. {
  7. return $this->foo;
  8. }
  9. }
  10.  
  11. class B extends A
  12. {
  13. public function setFoo($foo)
  14. {
  15. $this->foo = $foo;
  16. }
  17. }
  18.  
  19. // Widoczność w klasie dziedziczącej
  20. $objB = new B();
  21. $objB->setFoo('bar');
  22. echo $objB->getFoo(); // bar
  23.  
  24. // Ale te dwa użycia już nie zadziałają
  25. // PHP Warning: Uncaught Error: Cannot access protected property B::$foo
  26. $objB->foo = 'bar';
  27.  
  28. $objA = new A();
  29. $objA->foo = 'bar';


Cytat(casperii @ 22.06.2017, 22:37:54 ) *
i jak wstawić w Logowanie tą $session ?


Przez przekazanie parametru (może być w konstruktorze, albo w samej funkcji Logowanie:
  1. class JakasKlasa
  2. {
  3. protected $_session;
  4.  
  5. public function Logowanie($session)
  6. {
  7. $this->_session = $session;
  8. }
  9. }
  10.  
  11. // Użycie
  12. $session = 'jakas-sesja';
  13. $test = new JakasKlasa();
  14. $test->Logowanie($session);


Cytat(casperii @ 22.06.2017, 22:37:54 ) *
w jaki sposób mam pobrać to co jest w session-handle-part ?


Ustawić setter tak jak napisał @viking
  1. class JakasKlasa
  2. {
  3. protected $_session;
  4.  
  5. public function Logowanie($session)
  6. {
  7. $this->_session = $session;
  8. }
  9.  
  10. public function getSession()
  11. {
  12. return $this->_session;
  13. }
  14. }
  15.  
  16. // Użycie
  17. $session = 'jakas-sesja';
  18. $test = new JakasKlasa();
  19. $test->Logowanie($session);
  20. // Pobranie sesji
  21. $pobrana_sesja = $test->getSession();


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 23.06.2017, 07:51:12
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


protected najłatwiej określić jako własność klasy która nie jest dostępna publicznie ale jest dziedziczona. Natomiast private nie jest dziedziczona i dla tego wywala error w 2-gim przykładzie.

  1. <?php
  2.  
  3. class A {
  4. protected $a = ';;';
  5. }
  6.  
  7. class B extends A {
  8.  
  9.  
  10. public function show() {
  11. echo $this->a;
  12. }
  13. }
  14.  
  15.  
  16. class C {
  17. private $a = ';;';
  18. }
  19.  
  20. class D extends C {
  21.  
  22.  
  23. public function show() {
  24. echo $this->a;
  25. }
  26. }
  27.  
  28. echo (new B())->show();
  29. echo (new D())->show();


Ten post edytował Pyton_000 23.06.2017, 07:51:42
Go to the top of the page
+Quote Post
casperii
post 24.06.2017, 15:43:00
Post #6





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


ok zrozumiałem, jeszcze mam pytanie odnośnie tego:

  1. public function MyAccountItemsCount($Options) {
  2. $this->checkConnection();
  3. return $this->_client->doMyAccountItemsCount(
  4. $this->_session['session-handle-part'], $Options['account-type'], $Options['items-array']
  5. );
  6. }


to co powinienem przekazać w ()?

  1. $count = $api->MyAccountItemsCount()
Go to the top of the page
+Quote Post
Pyton_000
post 24.06.2017, 15:49:14
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


tablicę... no chyba podstawy już w końcu opanowałeś...
Go to the top of the page
+Quote Post
markuz
post 24.06.2017, 16:15:58
Post #8





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


No ale przecież w metodzie masz użyte klucze:
$Options['account-type'], $Options['items-array']
A ty przekazujesz klucze 0, 1 i 2.

Poza tym nie nazywaj zmiennych/metod z dużej litery.

Powinien Ci wyskoczyć błąd "undefinex index X in array"..

Ten post edytował markuz 24.06.2017, 16:16:41


--------------------
Go to the top of the page
+Quote Post
casperii
post 24.06.2017, 16:39:43
Post #9





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


@markuz dzięki.
Może komuś się przyda:


  1. $domyaccountitemscount_request = array(
  2. 'session-handle-part' => ''.$sess.'',
  3. 'account-type' => 'sold',
  4. 'items-array' => array()
  5. );
  6.  
  7. $county = $api->MyAccountItemsCount($domyaccountitemscount_request);


A proszę napisz mi co w tym przypadku należy przekazać do funkcji MyBilling() ?

  1. public function MyBilling() {
  2. return $this->_client->doMyBilling(
  3. self::COUNTRY_CODE
  4. );
  5. }
  6.  
  7. $billing = $api->MyBilling()



gdyż wg. dokumentacji
  1. $domybilling_request = array(
  2. 'sessionHandle' => '22eb99326c6be29aa16d07d622bcfbcbee94ad54846f2f4e03_1'
  3. );

Go to the top of the page
+Quote Post
markuz
post 24.06.2017, 16:45:59
Post #10





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Nic. Ta metoda nie ma żadnych argumentów przecież.

Chyba, że chodzi Ci o $this->_client->doMyBilling, ale nie wiem co masz do niej przekazać nie znając kodu. Pokaż dokumentację albo źródła.

Ten post edytował markuz 24.06.2017, 16:47:46


--------------------
Go to the top of the page
+Quote Post
casperii
post 24.06.2017, 16:49:04
Post #11





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


źródło: http://allegro.pl/webapi/documentation.php...09#method-input

Nie przekazanie niczego wywala błąd:
Błędny identyfikator sesji. Proszę spróbować zalogować się jeszcze raz!

Ten post edytował casperii 24.06.2017, 16:50:09
Go to the top of the page
+Quote Post
markuz
post 24.06.2017, 16:51:16
Post #12





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


A więc:
  1. $domybilling_request = array(
  2. 'sessionHandle' => '22eb99326c6be29aa16d07d622bcfbcbee94ad54846f2f4e03_1'
  3. );

gdzie sessionHandle to:
Cytat
Identyfikator sesji użytkownika, uzyskany za pomocą metody doLogin(Enc).

Czyli najpierw musisz wywołać doLogin żeby uzyskać id sesji.

doLogin zwraca:
  1. $dologin_response = array(
  2. 'sessionHandlePart' => '22eb99326c6be29aa16d07d622bcfbcbee94ad54846f2f4e03_1',
  3. 'userId' => 4109848,
  4. 'serverTime' => 1269814134
  5. );

To sobie musisz zapisać w tej klasie czy gdzie tam chcesz.

Ten post edytował markuz 24.06.2017, 16:53:02


--------------------
Go to the top of the page
+Quote Post
casperii
post 24.06.2017, 16:53:03
Post #13





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


a nie lepiej zrobić tak:

  1. public function MyBilling() {
  2. return $this->_client->doMyBilling(
  3. self::COUNTRY_CODE, $this->_session['session-handle-part']
  4. );
  5. }


dodając do funkcji session-handle-part

sesje wcześniej pobieram i jak printuje to ona jest dostępna.

funkcje login i getsession mam:
  1. public function LoginEnc() {
  2. $version = $this->QuerySysStatus(1);
  3. $this->_local_version = $version['ver-key'];
  4. //do
  5. $session = $this->_client->doLoginEnc(
  6. $this->_config['allegro_login'], $this->_config['allegro_password'], self::COUNTRY_CODE, $this->_config['allegro_key'], $version['ver-key']
  7. );
  8. $this->_session = $session;
  9. unset($this->_config['allegro_password']);
  10. }
  11.  
  12. public function getSession() {
  13. $this->checkConnection();
  14. return $this->_session['session-handle-part'];
  15. }



Ten post edytował casperii 24.06.2017, 16:54:23
Go to the top of the page
+Quote Post
markuz
post 24.06.2017, 16:54:03
Post #14





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Oczywiście, że możesz tak zrobić - tylko poproś Allegro żeby przebudowali swoje API.

Według powyższego kodu twoja metoda MyBilling powinna wyglądać tak:

  1. public function MyBilling() {
  2. return $this->_client->doMyBilling([
  3. 'sessionHandle' => $this->_session['sessionHandlePart']
  4. ]);
  5. }


Nazywaj metody z małej litery.
Naucz się rozróżniać, że sessionHandlePart to coś innego od session-handle-part.

Twoja metoda checkConnection robi nie to co trzeba. Ona nie sprawdza czy użytkownik jest już zalogowany tylko go loguje za każdym razem - co jest błędem.

Ten post edytował markuz 24.06.2017, 16:58:20


--------------------
Go to the top of the page
+Quote Post
markuz
post 24.06.2017, 17:16:37
Post #15





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


  1. public function MyBilling() {
  2. return $this->_client->doMyBilling(
  3. // self::COUNTRY_CODE
  4. 'sessionHandle' => $this->_session['sessionHandlePart']
  5. );
  6. }

Co to jest? Powinno Ci wypluć błędy składniowe..
Tam jest tablica, obuduj to w array() albo [].


--------------------
Go to the top of the page
+Quote Post
casperii
post 26.06.2017, 21:05:30
Post #16





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


ha! działa:
  1. public function MyBilling() {
  2. return $this->_client->doMyBilling(
  3. self::COUNTRY_CODE,
  4. $this->_session['session-handle-part']
  5. );
  6. }



Temat można zamknąć, problem rozwiązany.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 10:53