Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Przekazanie danych do zmiennej?
Forum PHP.pl > Forum > Przedszkole
luis2luis
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ąć.
Pyton_000
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
luis2luis
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.
com
bo clone robi tylko płytka kopie, pytanie poco Ci kopia?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.