Okna.  Wirusy.  Laptopy.  Internet.  Biuro.  Narzędzia.  Kierowcy

(PECL yaml >= 0,4,0)

yaml_parse — Analizuje strumień YAML

Opis

yaml_parse (ciąg $wejście [, int $poz = 0 [, int &$ndoks [, tablica $callbacks = NIEWAŻNY ]]]) : mieszany

Konwertuje całość lub część strumienia YAML i zapisuje go do zmiennej.

Lista parametrów

Linia do analizowania jako strumień YAML.

Dokument do analizy ( -1 dla wszystkich dokumentów, 0 dla pierwszego dokumentu, ...).

Jeśli zostanie znaleziony ndocs, zostanie on zastąpiony liczbą dokumentów w strumieniu YAML.

Zwróć wartości

Zwraca wartość zakodowaną na wejściu w odpowiednim typie PHP lub FAŁSZ w przypadku błędu. Jeśli parametr poz równa się -1 , zostanie zwrócona tablica zawierająca jeden wpis dla każdego dokumentu znalezionego w strumieniu.

Przykłady

Przykład nr 1 Przykład użycia yaml_parse()

$yaml =<<---
faktura: 34843
data: "2001-01-23"
adres rachunku: &id001
podano: Chris
rodzina: Dumars
adres:
linie: |-
458 Walkman Dr.
Apartament nr 292
miasto: Dąb Królewski
stan: MI
pocztowy: 48046
strona: zxibit.esy.es
wysyłka do: *id001
produkt:
- numer seryjny: BL394D
ilość: 4
opis: Koszykówka
cena: 450
- numer katalogowy: BL4438H
ilość: 1
opis: Super obręcz
cena: 2392
podatek: 251,420000
razem: 4443,520000
Komentarze: Najlepsze jest późne popołudnie. Kontakt zapasowy to Nancy Billsmer @ 338-4338.
...
EOD;

$parsed = yaml_parse ($yaml);
var_dump ($przeanalizowany);
?>

Wynik uruchomienia tego przykładu będzie mniej więcej taki:

array(8) ( ["faktura"]=> int(34843) ["data"]=> string(10) "2001-01-23" ["rachunek"]=> &array(3) ( [" podany"]=> string(5) "Chris" ["rodzina"]=> string(6) "Dumars" ["adres"]=> array(4) ( ["linie"]=> string(34) " 458 Walkman Dr. Suite #292" ["miasto"]=> string(9) "Royal Oak" ["stan"]=> string(2) "MI" ["poczta"]=> int(48046) ) [ "ship-to"]=> &array(3) ( ["podany"]=> string(5) "Chris" ["rodzina"]=> string(6) "Dumars" ["adres"]=> tablica ( 4) ( ["lines"]=> string(34) "458 Walkman Dr. Suite #292" ["miasto"]=> string(9) "Royal Oak" ["stan"]=> string(2) " MI" ["postal"]=> int(48046) ) ) ["produkt"]=> tablica(2) ( => tablica(4) ( ["sku"]=> string(6) "BL394D" [ " ilość"]=> int(4) ["opis"]=> string(10) "Koszykówka" ["cena"]=> int(450) ) => array(4) ( ["sku"]=> string (7) "BL4438H" ["ilość"]=> int(1) ["opis"]=> string(10) "Super Hoop" ["cena"]=> int(2392) ) ) ["podatek" ] => float(251.42) ["total"]=> float(4443.52) ["comments"]=> string(68) "Najlepiej późnym popołudniem. Kontakt zapasowy to Nancy Billsmer @ 338-4338. )

Nadszedł dzień i pliki konfiguracyjne ponieważ nasza aplikacja stała się tak duża, że ​​menedżerowie zasugerowali, że w konfiguracjach JSON znajduje się podejrzanie duża liczba nawiasów klamrowych i niekręconych i chcieliby się ich pozbyć. Podano subtelną wskazówkę, że warto przyjrzeć się YAML-owi bliżej, bo krążą plotki, że jest on bardzo czytelny dla człowieka. I nie ma tam żadnych nawiasów. A listy są piękne. Naturalnie nie mogliśmy powstrzymać się od wysłuchania starszych; byliśmy zmuszeni przestudiować tę kwestię, poszukać różnic, zalet i wad obu formatów. Oczywiście takie porównania podejmuje się tylko i wyłącznie po to, by potwierdzić opinię menadżerów, bo nawet jeśli nie zostaną one potwierdzone, to dowiedzą się, dlaczego mają rację i dlaczego warto dokonać zmian :)

Jestem pewien, że wielu zna te formaty, ale i tak to podam krótki opis z Wikipedii:

JSON (JavaScript Object Notation) to format wymiany danych tekstowych oparty na JavaScript i powszechnie używany w tym języku. Podobnie jak wiele innych formatów tekstowych, JSON jest łatwy do odczytania przez ludzi. Pomimo swoich korzeni w JavaScript (a dokładniej z podzbioru języka standardu ECMA-262 z 1999 r.), format ten jest uważany za niezależny od języka i może być używany w prawie każdym języku programowania. Dla wielu języków istnieje gotowy kod do tworzenia i przetwarzania danych w formacie JSON.

YAML to czytelny dla człowieka format serializacji danych, koncepcyjnie zbliżony do języków znaczników, ale skupiający się na wygodzie wejścia-wyjścia typowych struktur danych wielu języków programowania. Nazwa YAML jest rekurencyjnym akronimem od YAML Ain't Markup Language („YAML nie jest językiem znaczników”). Nazwa odzwierciedla historię rozwoju: na wczesnych etapach język nazywał się Yet Another Markup Language („Another Markup Language”). ”) i był nawet uważany za konkurencyjny format XML, ale później zmieniono jego nazwę, aby podkreślać dane, a nie znaczniki dokumentu.

Czego więc potrzebujemy:

  • utwórz ten sam złożony JSON i YAML
  • określ parametry, według których będziemy porównywać
  • Deserializuj obiekty w Javie około 30 razy
  • porównaj wyniki prędkości
  • porównaj czytelność plików
  • porównaj łatwość użycia z formatem

Oczywiście nie będziemy pisać własnych parserów, więc najpierw wybierzemy istniejący parser dla każdego formatu.
Dla jsona użyjemy gsona (z Google), a dla yaml użyjemy Snakeyaml (od nie wiem kogo).

Jak widać wszystko jest proste, wystarczy stworzyć dość złożony model, który będzie symulował złożoność plików konfiguracyjnych i napisać moduł, który przetestuje parsery yaml i json. Zacznijmy.
Potrzebujesz modelu o mniej więcej tej złożoności: 20 atrybutów różne typy+ 5 kolekcji po 5-10 elementów + 5 obiektów zagnieżdżonych po 5-10 elementów i 5 kolekcji.
Ten etap całego porównania można śmiało nazwać najbardziej nudnym i nieciekawym. Klasy zostały utworzone z cichymi nazwami, takimi jak Model, Emdedded1 itp. Ale nie gonimy za czytelnością kodu (przynajmniej w tej części), więc tak to zostawimy.

plik.json

"embedded2": ( "strel1": "el1", "strel2": "el2", "strel4": "el4", "strel5": "el5", "strel6": "el6", "strel7": " el7", "intel1": 1, "intel2": 2, "intel3": 3, "list1": [ 1, 2, 3, 4, 5 ], "lista2": [ 1, 2, 3, 4, 5, 6, 7 ], "lista3": [ "1", "2", "3", "4" ], "lista4": [ "1", "2", "3", "4", „5”, „6” ], „mapa1”: („3”: 3, „2”: 2, „1”: 1), „mapa2”: („1”: „1”, „2”: „2”, „3”: „3”) )


plik.yml

wbudowany2: intel1: 1 intel2: 2 intel3: 3 lista1: - 1 - 2 - 3 - 4 - 5 lista2: - 1 - 2 - 3 - 4 - 5 - 6 - 7 lista3: - "1" - "2" - „3” - „4” lista 4: - „1” - „2” - „3” - „4” - „5” - „6” mapa 1: „3”: 3 „2”: 2 „1”: 1 mapa2: 1: "1" 2: "2" 3: "3" strel1: el1 strel2: el2 strel4: el4 strel5: el5 strel6: el6 strel7: el7


Zgadzam się, że czytelność dla człowieka jest parametrem raczej subiektywnym. Ale nadal, moim zdaniem, yaml jest trochę przyjemniejszy dla oka i bardziej intuicyjny.

parser yaml

klasa publiczna BookYAMLParser implementuje Parser ( String nazwa pliku; public BookYAMLParser(String nazwa pliku) ( this.filename = nazwa pliku; ) @Override public void serialize(książka) ( try ( Opcje DumperOptions = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); Yaml yaml = nowy Yaml(opcje); new FileWriter(nazwa pliku); yaml.dump(książka, zapis); pisarz.close(); catch (IOException e) (e.printStackTrace();) @Override public Book deserialize() ( try (InputStream input = new FileInputStream(nowy plik(nazwa pliku)); Yaml yaml = new Yaml(); Dane książki = (Książka) yaml.load(input); input.close(); dane zwrotne; ) catch (FileNotFoundException e ) ( e.printStackTrace(); ) catch (YamlException e) ( e.printStackTrace(); ) catch (IOException e) ( e.printStackTrace(); ) catch (Wyjątek e) ( String message = " Wyjątek w pliku " + nazwa pliku + ", "; wyślij nowy wyjątek (wiadomość + e.getMessage()); return null;

parser jsona

klasa publiczna BookJSONParser implementuje Parser ( String nazwa pliku; public BookJSONParser(String nazwa pliku) ( this.filename = nazwa pliku; ) @Override public void serialize(Książka) ( Gson gson = new GsonBuilder().setPrettyPrinting().create();; try ( FileWriter pisarz = new FileWriter(nazwa pliku); String json = gson.toJson(książka); pisarz.close(); catch (IOException e) ( e.printStackTrace(); ) @Override public Book deserialize() ( Gson gson = nowy Gson() ; try ( BufferedReader br = nowy BufferedReader(nowy FileReader(nazwa pliku)); JsonReader jsonReader = nowy JsonReader(br); Book book = gson.fromJson(jsonReader, Book.class); return book ; ) catch (IOException e) ( e .printStackTrace(); ) zwróć wartość null ) )

Jak widzimy, oba formaty są obsługiwane w Javie. Ale w przypadku jsona wybór jest znacznie szerszy, jest to niezaprzeczalne.
Parsery są gotowe, teraz przyjrzyjmy się implementacji porównania. Tutaj także wszystko jest niezwykle proste i oczywiste. Istnieje prosta metoda deserializacji obiektów z pliku 30 razy. Jeśli ktoś jest zainteresowany, kod znajduje się pod spoilerem.

testowanie kodu

public static void main(String args) ( String jsonFilename = "file.json"; String yamlFilename = "file.yml"; BookJSONParser jsonParser = new BookJSONParser(jsonFilename); jsonParser.serialize(new Book(nowy autor("nazwa", "123-123-123"), 123, "dfsas")); BookYAMLParser yamlParser = new BookYAMLParser(yamlFilename); yamlParser.serialize(nowa książka(nowy autor("nazwa", "123-123-123"), 123 , "dfsas")); //deserializacja jsona StopWatch stopWatch = new StopWatch(); stopWatch.start();< LOOPS; i++) { Book e = jsonParser.deserialize(); } stopWatch.stop(); System.out.println("json worked: " + stopWatch.getTime()); stopWatch.reset(); //yaml deserialization stopWatch.start(); for (int i = 0; i < LOOPS; i++) { Book e; e = yamlParser.deserialize(); } stopWatch.stop(); System.out.println("yaml worked: " + stopWatch.getTime()); }

W rezultacie otrzymujemy następujący wynik:
json zadziałał: 278 yaml zadziałał: 669

Jak widać, pliki json są analizowane około trzy razy szybciej. Ale różnica bezwzględna nie jest krytyczna w naszej skali. Dlatego nie jest to mocny plus na korzyść jsona.
Dzieje się tak, ponieważ kod JSON jest analizowany na bieżąco, to znaczy jest odczytywany znak po znaku i natychmiast zapisywany w obiekcie. Okazuje się, że przedmiot powstaje w jednym przejściu przez pilnik. Prawdę mówiąc, nie wiem, jak dokładnie działa ten parser, ale ogólny schemat tak.
Z kolei yaml jest bardziej wyważony. Etap przetwarzania danych dzieli się na 3 etapy. Najpierw budowane jest drzewo obiektów. Potem jest w jakiś sposób przekształcany. I dopiero po tym etapie jest on konwertowany na niezbędne struktury danych.

Mały tabela porównawcza(„+” – przewaga, „-” – opóźnienie, „+-” – brak oczywistej przewagi):

Jak można to podsumować?
Tutaj wszystko jest oczywiste, jeśli ważna jest dla Ciebie szybkość - to json, jeśli czytelność dla człowieka - yaml. Musisz tylko zdecydować, co jest ważniejsze. Dla nas okazało się, że to drugie.
Tak naprawdę za każdym z formatów można podać znacznie więcej różnych argumentów, ale uważam, że te dwa punkty są nadal najważniejsze.

Co więcej, pracując z YAML, musiałem poradzić sobie z niezbyt miłą obsługą wyjątków, zwłaszcza gdy błędy składniowe. Musiałem także przetestować różne biblioteki YAML. Na koniec trzeba było napisać jakąś walidację. Próbowaliśmy walidacji przy użyciu schematów (gdzie musieliśmy wywoływać klejnoty Ruby) i walidacji komponentów bean w oparciu o jsr-303. Jeśli interesuje Cię któryś z tych tematów, chętnie odpowiem na Twoje pytania.
Dziękuję za uwagę :)

P.S.
Pod koniec pisania artykułu natknąłem się na następujące porównanie yaml i json.

1. Na liście produktów kliknij „Prześlij”

Po wgraniu produktów do parsera, będąc na stronie z listą produktów, należy kliknąć przycisk „Prześlij”.

2. Skonfiguruj ustawienia formatu

W wyświetlonym oknie wybierz format „Yandex.Market (YML)” i skonfiguruj ustawienia formatu: sposób przesyłania cech i odrębnych właściwości.

Szczegółowy opis każdego ustawienia można znaleźć poniżej na tej stronie.

3. Rozpoczęto przesyłanie

Pojawi się wskaźnik rozładunku towaru. Jeśli nie chcesz czekać, możesz wyłączyć komputer lub zamknąć przeglądarkę – pobieranie będzie kontynuowane niezależnie od Ciebie.

Co to jest YML?

YML (Yandex Market Language) to opracowany przez firmę Yandex standard służący do akceptowania i umieszczania informacji w bazie danych Yandex.Market. YML opiera się na standardzie XML.

Ustawienia formatu:

Wygeneruj identyfikator oferty z— pozwala wybrać sposób tworzenia atrybutu id tagu oferty, który określa identyfikator oferty produktu.

Oddzielne wiele właściwości— umożliwia wybór sposobu podziału wybranych właściwości (Rozmiary, Kolory itp.): albo w oparciu o powtarzający się tag param, albo w oparciu o podział oferty na poszczególne produkty po group_id, zgodnie ze specyfikacją YML.

Produkty są niedostępne— możesz ustawić sposób wyświetlania produktów „Brak w magazynie” na rynku: Na zamówienie, tj. z możliwością zamówienia lub całkowicie niedostępny.

Ustawienia ogólne:

Rozładować towar— umożliwia wybranie produktów do rozładunku na podstawie „Dostępności” na stronie dostawcy.

Procedura rozładunku towaru— umożliwia wybór kolejności rozładunku towaru oraz w razie potrzeby ustawienie rozładunku wstecz.

Zezwalaj na znaczniki HTML w polach produktów— umożliwia lub wyłącza znaczniki HTML w polach produktów. Bardzo rzadko stosowane przez sklepy internetowe.

Przesyłanie obrazów— umożliwia zmianę liczby lub sposobu przesyłania zdjęć.

Przesyłanie charakterystyki— umożliwia wgranie właściwości produktu (kolory, rozmiary itp.) jako osobne pola w pliku lub po prostu dodanie opis ogólny towary. Po dodaniu do opisu same kolumny pozostają. Dobierane w zależności od możliwości Twojego sklepu internetowego lub strony joint venture.

Podziel na wiele plików— umożliwia podzielenie przesyłanego pliku na kilka plików: według kategorii lub marki.

Znalazłeś błąd podczas przesyłania do tego formatu?

Jeśli znajdziesz błąd w formacie przesyłania Yandex.Market (YML), powiadom nas na czacie w witrynie lub za pośrednictwem czatu. Postaramy się naprawić przesyłanie tak szybko, jak to możliwe.

Wtyczka umożliwia importowanie produktów z innych sklepów za pośrednictwem kanału XML Yandex, który jest używany przez sklepy do handlu na Yandex.Market.
Produkty są importowane do struktury wtyczek WP Shop. Następuje automatyczna synchronizacja produktów ze źródłem, którą można uruchomić ręcznie lub poprzez cron.
Niezbędne narzędzie do:
1. Przeniesienie sklepu z innych silników do WordPress WP-Shop
2. Budowanie sklepów partnerskich w celu zarabiania na prowizjach partnerskich w modelu CPS

Aplikacja do działania wymaga IonCube Loader!

Sekcja arbitralna 1

Często zadawane pytania

Instrukcje instalacji
  1. Prześlij wtyczkę „WP Shop YML Parser” do katalogu /wp-content/plugins/
  2. Aktywuj wtyczkę „WP Shop YML Parser” poprzez menu „Wtyczki” w WordPress
  3. Zobacz pełną instrukcję obsługi, jak skonfigurować „Parser YML WP Shop”
Pytanie, które może ktoś mieć

Odwiedź witrynę wp-shop.ru, aby uzyskać pomoc.

Recenzje

W żadnym wypadku nie kontaktuj się z tymi programistami ani nie kupuj od nich niczego. Funkcjonalność, którą obiecują w wersji pro, jest kłamstwem. Po prostu wezmą Twoje pieniądze, a następnie odmówią wszystkiego, łącznie z wsparciem. Wystarczy spojrzeć na ich krzywą stronę internetową i półżywą dokumentację, a sam wszystko zrozumiesz!

Dziennik zmian

Wersja: 0.9
-projekt_jako_pole
-id_jako_pole

Wersja: 0.8
-template_price (niestandardowa metka z ceną)

Wersja: 0.7
-fields_update — nowe ustawienie umożliwiające aktualizację niestandardowych pól w projektach

Wersja: 0.6
-Przykładowy parser xml zastąpiony przez parser SAX, który jest lepszy do zarządzania pamięcią

Wersja: 0.5
-ulepszenia

Wersja: 0.4
-analiza zbiorcza
-klonuj projekt według kategorii

Wersja: 0.3
-link do dokumentów

Wersja: 0.2
- Włącz kanały lokalne
- źródło jako plik włączony
- dodanie opcji yml

Wersja: 0.1
-pierwsze wydanie

Testowanie przyrządu, pliki konfiguracyjne i pliki dziennika powinny być czytelne dla człowieka. YAML (YAML Not Markup Language) zawiera mniej szczegółowe dane niż format serializacji XML i stał się popularnym formatem wśród programistów oprogramowanie głównie dlatego, że jest łatwiejszy do zrozumienia przez człowieka. Pliki YAML są proste pliki tekstowe, zawierający dane zapisane zgodnie z regułą składni YAML i z reguły ma rozszerzenie .yml. W tym artykule zapoznasz się z podstawami YAML i w jaki sposób możesz zintegrować parser YAML PHP ze swoimi projektami.

Użyj YAML w projektach PHP

Zrozumienie składni YAML

YAML obsługuje zaawansowane funkcje, takie jak referencje i niestandardowe typy danych, ale jako programista PHP przez większość czasu będziesz zainteresowany tym, jak YAML reprezentuje tablice wyliczeniowe (sekwencje w terminologii YAML) i tablice asocjacyjne (mapowania).

Oto jak wyliczenie jest reprezentowane w tablicy YAML:

- „William O'Neal” – fałsz

Każdy element tablicy jest reprezentowany po łączniku i spacji. Jego składnia do reprezentowania wartości jest podobna do PHP (cytowanie ciągów znaków itp.)

Powyższe jest równoważne następującemu PHP:

Zwykle każdy element pojawia się w osobnym wierszu w YAML, ale wymienione tablice można wyrazić w jednym wierszu za pomocą nawiasów:

[2, „William O'Neal”, fałsz ]

Poniższy kod pokazuje, jak tablica asocjacyjna jest reprezentowana w YAML:

Identyfikator: 2 nazwa: „William O'Neal” jest aktywny: fałszywy

Klucz pierwszego elementu określa dwukropek i jedną lub więcej spacji, a następnie określana jest wartość. Wystarczy jedna spacja po dwukropku, ale jeśli chcesz, możesz użyć więcej miejsca dla lepszej czytelności.

Równoważna tablica PHP powyższego YAML to:

2, "imię" => "William O"Neal", "isActive" => fałsz);?>

Podobnie jak w przypadku tablic wymienionych na liście, możesz wyrazić tablice asocjacyjne w jednym wierszu, używając nawiasy klamrowe:

(id: 2, name: „William O'Neal”, isActive: false )

Za pomocą jednej lub większej liczby spacji na wcięcia można przedstawić tablicę wielowymiarową w następujący sposób:

Powyżej bloku YAML jest to równoważne następującemu PHP:

array(0 => array("id" => 1, "name" => "Brad Taylor", "isActive" => true), 1 => array("id" => 2, "name" => " William O"Neill", "isActive" => fałsz)));?>

YAML umożliwia także reprezentowanie zbioru elementów danych w jednym dokumencie bez konieczności stosowania węzła głównego. Poniższy przykład zawiera zawartość pliku artykuł.yml, który przedstawia wiele tablic wielowymiarowych w jednym pliku.

Autor: 0: (id: 1, nazwa: "Brad Taylor", isActive: true ) 1: (id: 2, name: "William O"Neal", isActive: false ) kategoria: 0: (id: 1, nazwa : "PHP" ) 1: ( id: 2, nazwa: "YAML" ) 2: ( id: 3, nazwa: "XML" ) artykuł: 0: id: 1 tytuł: "Jak używać YAML w projekcie PHP" treść: > YAML to mniej szczegółowy format serializacji danych. Za nim kryje się „YAML nie jest językiem znaczników”. YAML jest popularnym formatem serializacji danych wśród twórców oprogramowania, głównie dlatego, że jest czytelny dla człowieka. Autor: 1 status: 2 artykułKategoria : 0 : (Id artykułu: 1, Id kategorii: 1 ) 1: (Id artykułu: 1, Id kategorii: 2 )

Chociaż większość składni YAML jest intuicyjna i łatwa do zapamiętania, istnieje jedna ważna zasada, na którą należy zwrócić uwagę. Wyrównanie musi zostać wykonane z jedną lub większą liczbą spacji; Tabulatory są niedozwolone. Można skonfigurować środowisko IDE tak, aby po naciśnięciu klawisza tabulatora wstawiała spacje zamiast tabulacji, co jest typową konfiguracją wśród twórców oprogramowania, zapewniającą prawidłowe wcięcie kodu i jego wyświetlanie w innych edytorach.

Możesz poznać bardziej zaawansowane funkcje i składnię oraz to, co obsługuje YAML, czytając oficjalną dokumentację, Symfony lub Wiki.

YAML nie powinien być alternatywą dla XML

Jeśli odkrywasz YAML ze swoją ukochaną wyszukiwarka, niewątpliwie poruszasz temat „YAML kontra XML” i naturalnie, kiedy po raz pierwszy zobaczysz YAML, generalnie wolisz go od XML, ponieważ jest łatwiejszy do odczytu i zapisu, jednak YAML powinien nadal być jednym z narzędzi programisty arsenał i nie powinien być alternatywą dla XML. Oto kilka zalet YAML i XML.

Korzyści z YAML-a

  • Mniej szczegółowe, łatwiejsze do skomponowania i bardziej czytelne
  • Nie ma struktury drzewiastej z jednym węzłem nadrzędnym

Korzyści z XML-a

  • Więcej wbudowanej obsługi PHP w porównaniu do YAML
  • XML stał się de facto standardem komunikacji pomiędzy aplikacjami komunikacyjnymi
  • Tagi XML mogą mieć atrybuty dostarczające bardziej szczegółowych informacji o prywatnych danych

Chociaż jest gadatliwy, XML jest bardziej czytelny i łatwiejszy w utrzymaniu, gdy hierarchia elementów jest głęboka w porównaniu z reprezentacją hierarchii opartą na przestrzeni w YAML.

Biorąc pod uwagę zalety obu języków, YAML wydaje się bardziej odpowiedni do gromadzenia różnych zbiorów danych i gdy jednym z konsumentów danych są także ludzie.

Wybierz Parser PHP YAML

Parser YAML ma dwa funkcjonalność, rodzaj ładowania funkcji konwertującej YAML na tablicę oraz funkcję zrzutu, która konwertuje tablicę na YAML.

Obecnie parser PHP YAML, dostępny jako rozszerzenie PECL i nie jest dołączony do PHP. Ponadto istnieją analizatory napisane w czystym PHP, które byłyby nieco wolniejsze w porównaniu z rozszerzeniem PECL.

Poniżej znajduje się kilka parserów YAML dla PHP:

  • Nie jest dostarczany z PHP
  • Wymaga dostępu root do serwera w celu instalacji
  • Zaimplementowane w PHP
  • Będzie działać w PHP 5.2.4+
  • Trzeba wyodrębnić frameworki z Symfony
  • Zaimplementowane w PHP
  • Będzie działać w PHP 5.3.2+
  • Zaimplementowane w PHP
  • Będzie działać w PHP 5+

Wolę wybrać komponenty YAML Symfony 1.4 ze względu na przenośność (działa z PHP 5.2.4+) i możliwość wykorzystania (zainstalowany Symfony 1.4 i framework PHP). Po rozpakowaniu archiwum YAML komponentów Symfony, klasy YAML będą dostępne w lib/yaml. Metody statyczne loading() i dump() są dostępne w klasie sfYaml.

Integracja z projektem Parser PHP YAML

Ilekroć musisz zintegrować klasę lub bibliotekę innej firmy ze swoim projektem PHP, dobrą praktyką jest utworzenie opakowania i testów. Zmiana biblioteki innej firmy przy minimalnych zmianach w kodzie projektu (do kodu projektu powinna mieć zastosowanie tylko powłoka) i z pewnością, że zmiany nie spowolnią żadnej funkcjonalności (testów).

Poniżej znajduje się test (YamlParserTest.php), który został stworzony dla jego klasy opakowania (YamlParser.php). Wymagane do uruchomienia i utrzymania testu. Jeśli chcesz, możesz dodać wiele testów dla nieprawidłowych nazw plików i rozszerzeń plików innych niż .yml oraz inne testy oparte na skryptach, które napotkasz w swoim projekcie.

yamlParser = nowy YamlParser();"; $content = "YAML is a less-verbose data serialization format. " . "It stands for \"YAML Ain"t Markup Language\". " . "YAML has been a popular data serialization format among " . "software developers mainly because it"s human-readable.\n"; $expectedArticle = array("id" => 1, "title" => $title, "content" => $content, "author" => 1, "status" => 2); $this->assertEquals($expectedArticle, $actualArticle); } /** * @expectedException YamlParserException */ public function testExceptionForWrongSyntax() { $this->yamlParser->load("wrong-syntax.yml"); } }?> !}

) funkcja publiczna testMainArrayKeys() ( $parsedYaml = $this->yamlParser->load("article.yml"); $mainArrayKeys = array_keys($parsedYaml); $expectedKeys = array("autor", "kategoria", "artykuł ", "articleCategory"); $this->assertEquals($expectedKeys, $mainArrayKeys); ) funkcja publiczna testSecondLevelElement() ( $parsedYaml = $this->yamlParser->load("article.yml"); $actualArticle = $ parsedYaml["artykuł"]; $title = "Jak używać YAML w następnym projekcie PHP

A oto klasa opakowania:< 0) { parent::__construct($message, $code); } else { parent::__construct($message, $code, $previous); } } }?>

P.S.

getMessage(), $e->getCode(), $e); ) ) funkcja publiczna dump($array) ( try ( return sfYaml::dump($array); ) catch (wyjątek $e) (wrzuć nowy wyjątek YamlParserException($e->getMessage(), $e->getCode(), $e); ) ) ) klasa YamlParserException rozszerza wyjątek ( funkcja publiczna __construct($message = "", $code = 0, $previous = NULL) ( if (version_compare(PHP_VERSION, "5.3.0") Teraz masz już wiedzę o tym, czym jest YAML i jak go reprezentować



Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl+Enter
UDZIAŁ: