2010-03-18 14 views
50

Possible Duplicate:
PHP ToString() equivalentjak konwertować obiekt na ciąg w php

jak konwertować obiekt na ciąg w php

Właściwie mam do czynienia z APIs.i usług internetowych chcą wykorzystać moc jednego API jako wejście do innego API. kiedy próbuję to zrobić, otrzymałem komunikat o błędzie: Catchable fatal error: Obiekt klasy std nie mógł zostać przekonwertowany na ciąg znaków w C: \ ...

jest to wynik pierwszego obiektu API :: stdClass ([document_number] => 10ba60) teraz chcę tylko, że liczba użyć jako wejście dla 2 AP

print_r i _string() oba nie działają w moim przypadku

+3

czy masz na myśli rzucić go na strunę, jak w C? Lub wyświetlić bezpośrednią reprezentację wizualną zawartych w niej danych? – Cam

+0

W rzeczywistości mam do czynienia z interfejsami API usług internetowych. Chcę użyć wyjścia jednego API jako wejścia dla innego API. kiedy próbuję to zrobić, otrzymałem komunikat o błędzie: Catchable fatal error: Obiekt klasy std nie mógł zostać przekonwertowany na ciąg znaków w C: \ .... –

+0

Myślę, że będziesz musiał podać nam więcej szczegółów. Błąd pokazuje, że inne API używa powrotu z pierwszego jako ciąg. Myślę, że wszystko zależy od tego, jakie informacje są zwracane przez pierwszy interfejs API i jakie informacje potrzebuje drugie API. –

Odpowiedz

5

Istnieje moduł object serialization, z funkcją serialize możesz serializować dowolny obiekt.

+1

, ale jeśli obiekt ma złożone typy danych lub zasoby, powinieneś z nim pracować używając magicznych funkcji => http://php.net/manual/en/language.oop5.magic.php takich jak __wakeup lub __sleep do serializuje deserializację zasobów lub złożonych typów danych. – markcial

+1

Według php.net, gdy używasz serialize(), usiłuje się automatycznie wywołać __wakeup/__ w odpowiednim czasie, więc wszystko, o co musisz się martwić, to implementacja samych funkcji. Domyślam się jednak, że jest to nieco poza tym, co wymagałoby OP! – Cam

21

Użyj operatora odlewania (string)$yourObject;

+14

Działa tylko wtedy, gdy obiekt można rzutować na ciąg, np. implementuje __toString(). Co najwyraźniej nie ma miejsca w tym przypadku. –

+0

Działa to najlepiej w przypadku konwersji wartości obiektów na ciąg znaków, np. (string) $ object-> value Bardzo przydatne, gdy mamy różne typy do zwrotu. –

58

można dostosować w jaki sposób obiekt jest reprezentowany jako ciąg przez wdrożenie metody __toString() w swojej klasie, tak, że gdy obiekt jest type cast as a string (Explicit typu cast $str = (string) $myObject; lub automatyczny echo $myObject) możesz sterować zawartością i formatem ciągu.

Jeśli chcesz wyświetlić dane obiektu, powyższa metoda zadziała. Jeśli chcesz przechowywać obiekt w sesji lub bazie danych, musisz to zrobić: serialize, więc PHP wie, jak zrekonstruować instancję.

Niektóre kod wykazać różnicę:

class MyObject { 

    protected $name = 'JJ'; 

    public function __toString() { 
      return "My name is: {$this->name}\n"; 
    } 

} 

$obj = new MyObject; 

echo $obj; 
echo serialize($obj); 

wyjściowa:

My name is: JJ

O:8:"MyObject":1:{s:7:"*name";s:2:"JJ";}

+0

To nie jest serializacja. Poza serializacją części jest to bardzo dobre wytłumaczenie (szczególnie część o _implementing_ __toString()) – Cam

+0

Masz rację, zmieniłeś moją odpowiedź. –

+1

Czy było to tutaj przed moją odpowiedzią ?! Przepraszam, nie widziałem tego. Usunięto moje, wznowiono twoje. – Gordon

5

W twoim przypadku, należy po prostu użyć

$firstapiOutput->document_number 

jako wejście dla drugiego API.

+1

+1 To wydaje się być logicznym podejściem do "problemu" – Ben

Powiązane problemy