Ablakok.  Vírusok.  Jegyzetfüzetek.  Internet.  hivatal.  Segédprogramok.  Drivers

(PECL yaml >= 0,4,0)

yaml_parse- Elemez egy YAML adatfolyamot

Leírás

yaml_parse (string $bemenet [, int $poz = 0 [, int &$ndocs [, tömb $visszahívások = NULLA ]]]) : vegyes

A YAML adatfolyam egészét vagy egy részét konvertálja, és változóba ír.

Paraméterlista

Vonal YAML adatfolyamként történő elemzéshez.

dokumentum elemzése ( -1 minden dokumentumhoz 0 az első dokumentumhoz, ...).

Ha ndocs található, akkor azt a YAML adatfolyamban lévő dokumentumok száma helyettesíti.

Visszatérési értékek

A bemenetben kódolt értéket adja vissza a megfelelő PHP típusban, vagy HAMIS hiba esetén. Ha poz paraméter egyenlő -1 , egy tömb kerül visszaadásra, amely egy bejegyzést tartalmaz az adatfolyamban talált minden egyes dokumentumhoz.

Példák

1. példa Használati példa yaml_parse()

$yaml =<<---
számla: 34843
dátum: "2001-01-23"
számla címe: &id001
adott: Chris
család: Dumars
cím:
sorok: |-
458 Walkman Dr.
292-es lakosztály
város: Royal Oak
állapot: MI
posta: 48046
webhely: zxibit.esy.es
szállítási cím: *id001
termék:
- Cikkszám: BL394D
mennyiség: 4
Leírás: Kosárlabda
ára: 450
- Cikkszám: BL4438H
mennyiség: 1
leírás: Super Hoop
ára: 2392
adó: 251.420000
összesen: 4443.520000
megjegyzések: A késő délután a legjobb. A tartalék kapcsolattartó Nancy Billsmer @ 338-4338.
...
EOD;

$elemzés = yaml_parse($yaml);
var_dump($elemzés);
?>

A példa futtatásának eredménye a következő lesz:

array(8) ( ["számla"]=> int(34843) ["dátum"]=> string(10) "2001-01-23" ["bill-to"]=> &array(3) ( [" given"]=> string(5) "Chris" ["family"]=> string(6) "Dumars" ["cím"]=> array(4) ( ["vonalak"]=> string(34) " 458 Walkman Dr. Suite #292" ["city"]=> string(9) "Royal Oak" ["state"]=> string(2) "MI" ["postal"]=> int(48046) ) ) ["ship-to"]=> &array(3) ( ["adva"]=> string(5) "Chris" ["family"]=> string(6) "Dumars" ["cím"]=> tömb (4) ( ["vonalak"]=> string(34) "458 Walkman Dr. Suite #292" ["város"]=> string(9) "Royal Oak" ["állam"]=> string(2) "MI" ["postal"]=> int(48046) ) ) ["product"]=> array(2) ( => array(4) ( ["sku"]=> string(6) "BL394D" [ "quantity"]=> int(4) ["description"]=> string(10) "Kosárlabda" ["price"]=> int(450) ) => array(4) ( ["sku"]=> string(7) "BL4438H" ["mennyiség"]=> int(1) ["leírás"]=> string(10) "Super Hoop" ["price"]=> int(2392) ) ) ["adó" ]=> float(251.42) ["összesen"]=> float(4443.52) ["comments"]=> string(68) "A késő délután a legjobb. A tartalék kapcsolattartó Nancy Billsmer @ 338-4338.")

Eljött a nap és konfigurációs fájlok Az alkalmazásunk ugyanis olyan nagyra nőtt, hogy a menedzserek utaltak arra, hogy gyanúsan sok göndör és nem göndör zárójel van a JSON konfigurációkban, és szeretnének tőlük megszabadulni. Egy finom utalást adtak arra, hogy jó lenne közelebbről is megnézni a YAML-t, mert a pletykák szerint nagyon emberolvasható. És nincsenek zárójelek. És gyönyörűek a listák. Természetesen nem hallgathattuk meg az idősebbeket, tanulmányoznunk kellett a kérdést, keresni a különbséget, mindkét formátum előnyeit és hátrányait. Nyilvánvalóan az ilyen összehasonlítások csak a vezetők véleményének megerősítésére készülnek, vagy ha nem is, akkor is megtalálják, miért van igazuk, és miért érdemes változtatni :)

Biztos vagyok benne, hogy sokan ismerik ezeket a formátumokat, de mégis megadom Rövid leírás a wikipédiából:

A JSON (JavaScript Object Notation) egy szövegalapú adatcsere-formátum, amely JavaScript-en alapul, és általánosan használt ezzel a nyelvvel. Sok más szövegformátumhoz hasonlóan a JSON is könnyen olvasható az emberek számára. Annak ellenére, hogy a JavaScript eredetű (pontosabban az 1999-es ECMA-262 szabvány nyelvének egy részhalmaza), a formátum nyelvfüggetlennek tekinthető, és szinte bármilyen programozási nyelvvel használható. Számos nyelvhez létezik kész kód az adatok JSON formátumú létrehozásához és feldolgozásához.

A YAML egy ember által olvasható adatsorosító formátum, amely fogalmilag közel áll a jelölőnyelvekhez, de számos programozási nyelv tipikus adatszerkezetének beviteli/kimeneti kényelmére összpontosít. A YAML név a YAML rekurzív mozaikszója Ain "t Markup Language ("YAML nem jelölőnyelv"). A név a fejlődés történetét tükrözi: a kezdeti szakaszban a nyelvet Yet Another Markup Language-nek ("Another markup") hívták. nyelv") és még versenytárs XML-nek is számított, de később átnevezték, hogy a dokumentumjelölés helyett az adatokat hangsúlyozzák.

És amire szükségünk van:

  • ugyanazt az összetett JSON és YAML létrehozását
  • határozza meg azokat a paramétereket, amelyek alapján összehasonlítjuk
  • körülbelül 30-szor deszerializálja a Java objektumokat
  • hasonlítsa össze a sebességi eredményeket
  • összehasonlítani a fájl olvashatóságát
  • Hasonlítsa össze a használhatóságot a formátummal

Nyilvánvalóan nem fogunk saját elemzőket írni, ezért minden formátumhoz egy már létező elemzőt választunk.
A json esetében a gson-t fogjuk használni (a google-ból), a yaml-hoz pedig a snakeyaml-t (a nem tudom-kitől).

Amint látja, minden egyszerű, csak létre kell hoznia egy meglehetősen összetett modellt, amely szimulálja a konfigurációs fájlok összetettségét, és írjon egy modult, amely teszteli a yaml és a json elemzőket. Kezdjük el.
Körülbelül ilyen összetettségű modellre van szükségünk: 20 attribútum különböző típusok+ 5 5-10 elemből álló gyűjtemény + 5 beágyazott objektum 5-10 elemből és 5 gyűjtemény.
Az egész összehasonlítás ezen szakasza nyugodtan nevezhető a legunalmasabbnak és legérdektelenebbnek. Osztályokat hoztak létre, olyan hangzatos elnevezésekkel, mint a Model, Emdedded1 és így tovább. De nem a kód olvashatóságát hajszoljuk (legalábbis ebben a részben), így hagyjuk.

fájl.json

"embedded2": ( "strel1": "el1", "strel2": "el2", "strel4": "el4", "strel5": "el5", "strel6": "el6", "strel7": " el7", "intel1": 1, "intel2": 2, "intel3": 3, "lista1": [ 1, 2, 3, 4, 5 ], "list2": [ 1, 2, 3, 4, 5, 6, 7 ], "list3": [ "1", "2", "3", "4" ], "list4": [ "1", "2", "3", "4", "5", "6" ], "térkép1": ( "3": 3, "2": 2, "1": 1), "térkép2": ( "1": "1", "2": "2", "3": "3" ) )


file.yml

beágyazott2: intel1: 1 intel2: 2 intel3: 3 lista1: - 1 - 2 - 3 - 4 - 5 list2: - 1 - 2 - 3 - 4 - 5 - 6 - 7 list3: - "1" - "2" - "3" - "4" lista4: - "1" - "2" - "3" - "4" - "5" - "6" map1: "3": 3 "2": 2 "1": 1 térkép2: 1: "1" 2: "2" 3: "3" strel1: el1 strel2: el2 strel4: el4 strel5: el5 strel6: el6 strel7: el7


Egyetértek azzal, hogy az emberi olvashatóság meglehetősen szubjektív paraméter. De mégis véleményem szerint a yaml egy kicsit kellemesebb a szemnek és intuitívabb.

yaml elemző

public class A BookYAMLParser megvalósítja a Parser-t ( String filename; public BookYAMLParser(String filename) ( this.filename = fájlnév; ) @A public void serialize(Book book) felülbírálása ( próbálja meg ( DumperOptions options = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); Yaml) yaml = new Yaml(opciók); FileWriter író = új FileWriter(fájlnév); yaml.dump(könyv, író); writer.close(); ) catch (IOException e) ( e.printStackTrace(); ) ) @Nyilvános felülbírálása Book deserialize() ( try ( InputStream input = new FileInputStream(new File(fájlnév)); Yaml yaml = new Yaml(); Book data = (Könyv) yaml.load(input); input.close(); visszaadja az adatokat; ) catch (FileNotFoundException e) ( e.printStackTrace(); ) catch (YamlException e) ( e.printStackTrace(); ) catch (IOException e) ( e.printStackTrace(); ) catch (E kivétel) ( String message = " Kivétel a(z) " + fájlnév + ", " fájlban; dobja új Kivétel(üzenet + e.getMessage()); ) return null; ) )

json elemző

public class A BookJSONParser megvalósítja a Parser-t ( String filename; public BookJSONParser(String filename) ( this.filename = fájlnév; ) @A public void serialize(Book book) felülbírálása ( Gson gson = new GsonBuilder().setPrettyPrinting().create();; próbálkozzon ( FileWriter writer = new FileWriter(fájlnév); String json = gson.toJson(book); writer.write(json); writer.close(); ) catch (IOException e) ( e.printStackTrace(); ) ) @Public Book deserialize( ) ( Gson gson = new Gson(); próbálkozzon ( BufferedReader br = new BufferedReader(new FileReader(fájlnév)); JsonReader jsonReader = new JsonReader(br); Book book = gson.fromJson(jsonReader, Book.class); könyv visszaküldése ; ) catch (IOException e) ( e.printStackTrace(); ) return null; ) )

Amint látjuk, mindkét formátumot támogatja a java. De a json esetében sokkal szélesebb a választék, az biztos.
Az elemzők készen állnak, most nézzük az összehasonlítás megvalósítását. Itt is minden rendkívül egyszerű és kézenfekvő. Van egy egyszerű módszer, amely 30-szor deszerializálja az objektumokat egy fájlból. Ha valakit érdekel - a kód a spoiler alatt van.

tesztelési kód

public static void main(String args) ( String jsonFilename = "file.json"; String yamlFilename = "file.yml"; BookJSONParser jsonParser = new BookJSONParser(jsonFilename); jsonParser.serialize(new Book(new Author("név", "123-123-123"), 123, "dfsas")); BookYAMLParser yamlParser = new BookYAMLParser(yamlFilename); yamlParser.serialize(new Book(new Author("name", "123-123-123")), 123 , "dfsas")); //json deserializáció StopWatch stopWatch = new StopWatch(); stopWatch.start(); for (int i = 0; i< 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()); }

Ennek eredményeként a következő eredményt kapjuk:
json működött: 278 yaml működött: 669

Mint látható, a json-fájlok körülbelül háromszor gyorsabban kerülnek elemzésre. De az abszolút különbség a mi skálánkon nem kritikus. Ezért ez nem erős plusz a json javára.
Ez azért történik, mert a json-t menet közben elemzi, vagyis karakterenként olvassa be, és azonnal eltárolja egy objektumban. Kiderült, hogy az objektum egy menetben jön létre a fájlon. Igazából nem tudom, hogy ez az elemző pontosan hogyan működik, de be általános séma ilyen.
A yaml pedig kimértebb. Az adatfeldolgozási szakasz 3 szakaszra oszlik. Először egy objektumfát építenek. Aztán valahogy mégis átalakul. És csak ezen szakasz után konvertálódik a szükséges adatstruktúrákká.

kicsi összehasonlító táblázat("+" - előny, "-" - késés, "+-" - nincs egyértelmű előny):

Hogyan lehet ezt összefoglalni?
Itt minden nyilvánvaló, ha neked a sebesség a fontos - akkor json, ha az emberi olvashatóság - yaml. Csak azt kell eldönteni, hogy mi a fontosabb. Számunkra kiderült - a második.
Valójában sokkal több érv szól az egyes formátumok mellett, de szerintem ez a két szempont a legfontosabb.

Továbbá, amikor yaml-lel dolgoztam, nem túl szép kivételkezeléssel kellett megküzdenem, különösen a szintaktikai hibákkal. Ezenkívül különféle yaml-könyvtárakat kellett tesztelnem. Valamint a végén valamiféle érvényesítést kellett írni. Kipróbáltuk a séma érvényesítését (ahol rubin drágaköveket kellett hívnunk), és a bab validációt a jsr-303 alapján. Ha bármelyik téma felkeltette érdeklődését - szívesen válaszolok a kérdésekre.
Köszönöm a figyelmet:)

P.S.
Már a cikk írásának végén találkoztam a yaml és a json alábbi összehasonlításával.

1. A termékek listájában kattintson a "Feltöltés" gombra.

Az áru elemzőbe való feltöltése után, az árulistát tartalmazó oldalon kattintson a „Feltöltés” ​​gombra.

2. Adja meg a formátum beállításait

A megjelenő ablakban válassza ki a "Yandex.Market (YML)" formátumot, és állítsa be a formátum beállításait: hogyan töltsön fel jellemzőket és különálló tulajdonságokat.

Az egyes beállítások részletes leírása az alábbi oldalon található.

3. A feltöltés elindult

Megjelenik az áru kirakodása jelző. Ha nem szeretne várni, kikapcsolhatja számítógépét vagy bezárhatja a böngészőt – a letöltés Öntől függetlenül folytatódik.

Mi az az YML?

Az YML (Yandex Market Language) a Yandex által kifejlesztett szabvány az információk elfogadására és elhelyezésére a Yandex.Market adatbázisban. Az YML az XML szabványon alapul.

Formátum beállítások:

Ajánlatazonosító generálása innen— lehetővé teszi az ajánlati címke id attribútum létrehozásának módját, amely meghatározza a termékajánlat azonosítóját.

Több tulajdonság megosztása— lehetővé teszi a kiválasztott tulajdonságok (méretek, színek stb.) elkülönítésének kiválasztását: vagy az ismételt param tag alapján, vagy az ajánlat egyedi termékekre történő felosztása alapján a group_id alapján, az YML specifikáció szerint.

Elfogyott termékek- beállíthatja, hogy az „Elfogyott” termékek hogyan jelenjenek meg a piacon: Megrendelésre, pl. rendelési lehetőséggel vagy teljesen elfogyott.

Általános beállítások:

Árut kirakni— lehetővé teszi, hogy a beszállító weboldalán található „Elérhetőség” attribútum alapján válassza ki, mely termékeket kívánja kirakni.

Az áruk kirakodásának eljárása- lehetővé teszi az áruk kirakodási sorrendjének kiválasztását és a kirakodás visszaállítását, ha kívánja.

HTML-jelölés engedélyezése a termékmezőkben— engedélyezi vagy letiltja a HTML-jelölést a termékmezőkben. Nagyon ritkán használják az online áruházak.

Képek feltöltése- lehetővé teszi a képek feltöltésének számának vagy módjának megváltoztatását.

A kirakodás jellemzői- lehetővé teszi a termék tulajdonságainak (színek, méretek stb.) különálló mezőkként történő feltöltését egy fájlban, vagy egyszerűen hozzáadását Általános leírásaáruk. A leíráshoz hozzáadva maguk az oszlopok is megmaradnak. Az online áruház vagy a JV webhely lehetőségeitől függően kerül kiválasztásra.

Oszd fel több fájlra— lehetővé teszi a feltöltés több fájlra bontását: kategória vagy márka szerint.

Hibát talált az ebbe a formátumba való feltöltés során?

Ha hibát talál a Yandex.Market (YML) feltöltési formátumban, kérjük, tudassa velünk a webhelyen vagy a chatben. Igyekszünk a feltöltést mielőbb kijavítani.

A beépülő modul lehetővé teszi a termékek importálását más üzletekből a Yandex XML feeden keresztül, amelyet az üzletek a Yandex.Market kereskedéshez használnak.
A termékek a WP Shop beépülő modul struktúrájába importálódnak. Az áruk automatikus szinkronizálása a forrással történik, amely manuálisan és a cronon keresztül is elindítható.
Nélkülözhetetlen eszköz:
1. Az áruház átvitele bármely más motorból a WordPress WP-Shopba
2. Társult üzletek építése, hogy a CPS-modell segítségével a társult jutalékokból keressenek

Az alkalmazáshoz IonCube Loader szükséges!

Önkényes szakasz 1

GYIK

Telepítési útmutató
  1. Töltse fel a "WP Shop YML Parser" bővítményt a /wp-content/plugins/ könyvtárba
  2. Aktiválja a „WP Shop YML Parser” bővítményt a WordPress „Plugins” menüjében
  3. Tekintse meg a teljes használati útmutatót a "WP Shop YML Parser" beállításához
Egy kérdés, ami valakiben felmerülhet

Keresse fel a wp-shop.ru webhelyet segítségért.

Vélemények

Semmi esetre se vegye fel a kapcsolatot ezekkel a fejlesztőkkel, és ne vásároljon tőlük semmit. A funkcionalitás, amit a pro verzióban ígérnek, átverés. Egyszerűen pénzt vesznek el tőled, aztán mindent megtagadnak, beleértve a támogatást is. Csak nézd meg a görbe weboldalukat és a félig élő dokumentációjukat, és mindent megértesz!

Változási napló

Verzió: 0.9
-projekt_mint_mező
-id_as_field

Verzió: 0.8
-template_price (egyedi árcímke)

Verzió: 0.7
-fields_update – új beállítás a projektek egyéni mezőinek frissítéséhez

Verzió: 0.6
- A minta xml értelmezőt SAX értelmező váltotta fel, amely jobb a memóriakezeléshez

Verzió: 0.5
- fejlesztések

Verzió: 0.4
- tömeges elemzés
-klón projekt kategóriánként

Verzió: 0.3
- link a dokumentumokhoz

Verzió: 0.2
-Helyi hírcsatornák engedélyezése
- forrás, mint fájl engedélyezése
- kiegészítés yml opciók

Verzió: 0.1
-Első kiadás

A műszertesztelésnek, a konfigurációs fájloknak és a naplófájloknak mind ember által olvashatónak kell lenniük. A YAML (YAML Non Markup Language) kevesebb bőbeszédű adatot tartalmaz, mint az XML szerializációs formátum, és népszerű formátum lett a fejlesztők körében szoftver főleg azért, mert így könnyebb az emberi megértés. A YAML fájlok egyszerűek szöveges fájlok, amely a YAML szintaktikai szabálya szerint írt adatokat tartalmaz, és általában .yml fájlkiterjesztéssel rendelkezik. Ebben a cikkben megtudhatja a YAML alapjait, valamint azt, hogy hogyan integrálhat PHP YAML elemzőt a projektjeibe.

Használja a YAML-t PHP-projektekhez

A YAML szintaxis megértése

A YAML támogatja a speciális szolgáltatásokat, például a hivatkozásokat és az egyéni adattípusokat, de PHP-fejlesztőként a legtöbbször az érdekelni fogja, hogy a YAML hogyan reprezentálja a felsorolt ​​tömböket (a YAML terminológiájában szekvenciákat) és az asszociatív tömböket (térképeket).

A YAML tömbben az enum így ábrázolódik:

- "William O'Neil" - hamis

Minden tömbelem kötőjel és szóköz után jelenik meg. Az értékek megjelenítésére szolgáló szintaxis hasonló a PHP-hez (idéző ​​karakterláncok stb.)

A fenti egyenértékű a következő PHP-vel:

Általában minden elem a saját sorában jelenik meg a YAML-ben, de a felsorolt ​​tömbök egy sorban is kifejezhetők zárójelek használatával:

[ 2, "William O'Neil", hamis ]

A következő kód megmutatja, mi az asszociatív tömb a YAML-ben:

Id: 2 név: "William O'Neil" isActive: false

Az első elemkulcs kettőspontot és egy vagy több szóközt határoz meg, majd az értéket adjuk meg. Elég, ha a kettőspont után csak egy szóköz van, de ha szeretné, több helyet is használhat a jobb olvashatóság érdekében.

A fenti YAML tömb PHP megfelelője:

2, "name" => "William O'Neal", "isActive" => false);?>

És hasonlóan a felsorolt ​​tömbökhöz, asszociatív tömböket is kifejezhet egy sorban kapcsos zárójelek használatával:

( azonosító: 2, név: "William O"Neil", aktív: false )

Ha egy vagy több szóközt kell behúzni, akkor egy többdimenziós tömböt a következőképpen ábrázolhat:

A YAML blokk felett ez egyenértékű a következő PHP-vel:

array(0 => array("id" => 1, "name" => "Brad Taylor", "isActive" => true), 1 => array("id" => 2, "name" => " William O"Neal", "isActive" => false)));?>

A YAML lehetővé teszi az adatelemek gyűjteményének egyetlen dokumentumban történő megjelenítését gyökércsomópont szükségessége nélkül. A következő példa az article.yml fájl tartalmát tartalmazza, amely több többdimenziós tömböt jelenít meg egyetlen fájlban.

Szerző: 0: ( azonosító: 1, név: "Brad Taylor", aktív: igaz ) 1: ( azonosító: 2, név: "William O"Neil", isActive: false ) kategória: 0: ( azonosító: 1, név : "PHP" ) 1: ( azonosító: 2, név: "YAML" ) 2: ( azonosító: 3, név: "XML" ) cikk: 0: id: 1 cím: "A YAML használata PHP projektben" tartalom: > A YAML egy kevésbé bőbeszédű adatsorosítási formátum.Mögötte a "YAML nem jelölőnyelv" áll 0 : ( cikkazonosító: 1, kategóriaazonosító: 1 ) 1: ( cikkazonosító: 1, kategóriaazonosító: 2 )

Míg a YAML szintaxis nagy része intuitív és könnyen megjegyezhető, egy fontos szabályt kell szem előtt tartani. Az igazítást egy vagy több szóközzel kell elvégezni; fülek nem engedélyezettek. Beállíthatja, hogy az IDE szóközöket szúrjon be a tabulátorok helyett, amikor megnyomja a tabulátor billentyűt. Ez egy gyakori konfiguráció a szoftverfejlesztők körében annak biztosítására, hogy a kód megfelelően legyen behúzva, és más szerkesztőkben is megjelenjen.

A hivatalos dokumentumok, a Symfony vagy a Wiki elolvasásával megtudhatja a fejlettebb funkciókat és szintaxist, valamint azt, hogy mit támogat a YAML.

A YAML nem lehet az XML alternatívája

Ha a YAML-t kutatja kedvesével keresőmotor, Ön határozottan a "YAML vs. XML" témában jár, és természetesen, amikor először látja a YAML-t, általában azt részesíti előnyben az XML-lel szemben, mert könnyebben olvasható és írható. A YAML azonban továbbra is a fejlesztők egyik eszköze arzenál, és nem lehet az XML alternatívája. Íme néhány a YAML és az XML előnyei.

A YAML előnyei

  • Kevésbé bőbeszédű, könnyen összeállítható és jobban olvasható
  • Nem rendelkezik egyetlen szülőcsomóponttal rendelkező fastruktúrával

Az XML előnyei

  • Több beépített PHP támogatás a YAML-hez képest
  • Az XML a kommunikációs alkalmazások közötti kommunikáció de facto szabványává vált
  • Az XML-címkék olyan attribútumokkal rendelkezhetnek, amelyek további részleteket nyújtanak a személyes adatokról

Noha bőbeszédű, az XML jobban olvasható és karbantartható, ha az elemhierarchia mély, összehasonlítva a YAML térorientált hierarchiával.

Figyelembe véve mindkét nyelv előnyeit, úgy tűnik, hogy a YAML alkalmasabb különböző adatkészletek gyűjtésére, és amikor az emberek is a fogyasztói adatok közé tartoznak.

Choice Parser PHP YAML

YAML elemző, kettő van funkcionalitás, egyfajta terhelés a YAML-t tömbbé alakító függvényekhez, és egy olyan függvény kiíratása, amely egy tömböt YAML-re konvertál.

A jelenlegi PHP YAML-elemző PECL-kiterjesztésként érhető el, és nem tartozik a PHP-hez. Ezen kívül vannak tiszta PHP-ben írt értelmezők, amelyek valamivel lassabbak lennének a PECL kiterjesztéshez képest.

Az alábbiakban néhány YAML-elemző található a PHP-hez:

  • Nem PHP-vel szállítjuk
  • A telepítéshez root hozzáférésre lesz szüksége a szerverhez
  • PHP-ben implementálva
  • PHP 5.2.4+ verzióban működik
  • Keretrendszereket kell kivonni a Symfonyból
  • PHP-ben implementálva
  • PHP 5.3.2+ verzióban működik
  • PHP-ben implementálva
  • PHP 5+ verzióban működik

Inkább a Symfony 1.4 YAML komponenseket választom a hordozhatóság (PHP 5.2.4+ verzióval működik) és a visszaváltás (Symfony 1.4 és PHP keretrendszerek telepítve) miatt. Miután kibontotta a Symfony összetevők YAML archívumát, a YAML osztályok elérhetők a lib/yaml alatt. A static load() és a dump() metódusok az sfYaml osztályból érhetők el.

Integráció a Parser PHP YAML projektbe

Amikor harmadik féltől származó osztályt vagy könyvtárat integrál PHP-projektjébe, jó gyakorlat a burkoló és a tesztek létrehozása. Harmadik féltől származó könyvtár módosítása a projektkód minimális módosításával (csak a shellnek kell kapcsolódnia a projektkódhoz), és biztos lehet benne, hogy a változtatások nem lassítják le a funkcionalitást (tesztek).

A következő teszt (YamlParserTest.php) készült a burkoló osztályához (YamlParser.php). A teszt futtatásához és karbantartásához szükséges. Ha szeretné, további teszteket is hozzáadhat az .yml -től eltérő érvénytelen fájlnevekhez és fájlkiterjesztésekhez, valamint más, a projektben előforduló szkriptalapú teszteket.

yamlParser = new YamlParser(); ) nyilvános függvény testMainArrayKeys() ( $parsedYaml = $this->yamlParser->load("cikk.yml"); $mainArrayKeys = array_keys($parsedYaml); $expectedKeys = array("szerző", "kategória", "cikk" ", "articleCategory"); $this->assertEquals($expectedKeys, $mainArrayKeys); ) nyilvános függvény testSecondLevelElement() ( $parsedYaml = $this->yamlParser->load("cikk.yml"); $actualArticle = $ parsedYaml["cikk"]; $title = "A YAML használata a következő PHP projektben"; $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"); } }?> !}

És íme a wrapper osztály:

getMessage(), $e->getCode(), $e); ) ) public function dump($array) ( try ( return sfYaml::dump($array); ) catch (Exception $e) ( dobja új YamlParserException($e->getMessage(), $e->getCode(),) $e); ) ) ) osztály YamlParserException kiterjeszti a kivételt ( nyilvános függvény __construct($message = "", $code = 0, $previous = NULL) ( if (verzió összehasonlítása(PHP_VERSION, "5.3.0"))< 0) { parent::__construct($message, $code); } else { parent::__construct($message, $code, $previous); } } }?>

P.S.

Tehát most már tudja, mi az a YAML, és hogyan kell képviselni PHP tömbök a YAML-re, és integrálja a PHP YAML elemzőt a projektjeibe. Ha egy kis időt tölt a YAML szintaxissal, képes lesz megérteni az abban rejlő lehetőségeket. Érdemes lehet megvizsgálni a Symfony 1.4-et és a 2-t is, amelyek széles körben használják a YAML-t.

Ha hibát észlel, jelöljön ki egy szövegrészt, és nyomja meg a Ctrl + Enter billentyűket
OSSZA MEG: