Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Przekazanie danych do zmiennej?, Na jakiej zasadzie działą ten kod?
luis2luis
post 24.09.2021, 13:31:32
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


Witam.

Analizuje przykład z pewnej dokumentacji API. I widzę dziwny kod:

Przypisanie zmiennej albo raczej obiektu:
$customerFields = $blankXml->customer->children();

a później zmienna $customerFields nie jest nigdzie przekazywana tylko $blankXml zmienia swoja wartość.
Dlaczego pod koniec kodu używa się 'postXml' => $blankXml->asXML() zamiast np 'postXml' => $customerFields->asXML()?

Jak to możliwe, że zmiany w $customerFields zachodzą w tablicy $blankXml ?

  1.  
  2. <?php
  3. $customerFields = $blankXml->customer->children();
  4. $customerFields->firstname = 'John';
  5. $customerFields->lastname = 'DOE';
  6. $customerFields->email = 'john.doe@unknown.com';
  7. $customerFields->passwd = 'password1234';
  8.  
  9. $createdXml = $webService->add([
  10. 'resource' => 'customers',
  11. 'postXml' => $blankXml->asXML(),
  12. ]);
  13. $newCustomerFields = $createdXml->customer->children();
  14. echo 'Customer created with ID ' . $newCustomerFields->id . PHP_EOL;
  15.  



Jest to kod z dokumentacji prestaShop, dodawanie pozycji przez API: https://devdocs.prestashop.com/1.7/webservi...reate-resource/ Potrzebuje dodać kilka pozycji naraz i zastanawiam się jak zbudować tą pętle. Przy każdym wywołaniu pętli muszę pobierać pusty szkielet xml? Wolałbym tego uniknąć.

Ten post edytował luis2luis 24.09.2021, 13:33:44
Go to the top of the page
+Quote Post
Pyton_000
post 24.09.2021, 19:23:33
Post #2





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

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


Dlatego:

  1. <?php
  2.  
  3. $user = new stdClass();
  4.  
  5. function fill($class) {
  6. $class->first = '1';
  7. $class->second = 2;
  8. }
  9.  
  10. fill($user);
  11.  
  12. var_dump($user);
  13.  
  14. /**
  15. object(stdClass)#1 (2) {
  16.   ["first"]=>
  17.   string(1) "1"
  18.   ["second"]=>
  19.   int(2)
  20. }
  21. */


https://www.php.net/manual/en/language.oop5.references.php


W skrócie Obiekty w PHP są przekazywane przez referencję czyli mając obiekt i przypisując go do zmiennej to edyckja zmiennej edytuje obiekt. Aby mieć kopię obiektu trzeba użyć clone
Go to the top of the page
+Quote Post
luis2luis
post 27.09.2021, 10:03:44
Post #3





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

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


Cytat(Pyton_000 @ 24.09.2021, 20:23:33 ) *
W skrócie Obiekty w PHP są przekazywane przez referencję czyli mając obiekt i przypisując go do zmiennej to edyckja zmiennej edytuje obiekt. Aby mieć kopię obiektu trzeba użyć clone


Dziękuje za odpowiedź.
Widze, że jest jednak problem z klonowaniem obiektu Simple XML :/ samo clone nie daje efektu.
Go to the top of the page
+Quote Post
com
post 28.09.2021, 10:29:42
Post #4





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

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


bo clone robi tylko płytka kopie, pytanie poco Ci kopia?
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: 28.03.2024 - 21:58