Помощь Joomla



Изучаем Php

Разработка → Изучаем PHP изнутри. Zval  Май 11, 2016 – 09:34
Изучаем PHP и MySQL Если вы точно определили ответ и можете объяснить почему он будет именно таким, то, наверное, вы не узнаете из этой статьи ничего нового, иначе — вам определенно стоит прочитать эту статью, чтобы углубить свои знания.
Базовая структура
Базовой структурой данных в PHP является zval (сокращение от «Zend value»). Каждый zval хранит в себе несколько полей, два из которых — значение и тип этого значения. Это необходимо потому что PHP — это язык с динамической типизацией и поэтому тип переменных известен только во время выполнения программы, а не во время компиляции. Кроме того, тип переменной может быть изменен в течении жизни zval, то есть zval ранее хранимый как целое число позднее может содержать строку.

Тип переменной хранится как целочисленная метка (type tag, unsigned char). Метка может принимать одно из 8 значений, которое соответствует 8 типам данных доступных в PHP. Эти значения должны присваиваться с использованием констант вида IS_TYPE. Например, IS_NULL соответствует типу данных null, а IS_STRING — строке.

zvalue_value
Фактическое значение переменной хранится в типе данных union («объединение», в дальнейшем я буду использовать термины union или юнион), который определен следующим образом:

typedef union _zvalue_value { long lval; double dval; struct { char *val; int len; } str; HashTable *ht; zend_object_value obj; } zvalue_value;
Небольшое пояснение для тех кто не знаком с концепцией union-ов. Union определяет несколько членов-данных различных типов, но в каждый момент времени может использоваться только одно значение из определенных в юнионе. Например, если члену данных value.lval было присвоено значение, то для доступа к данным вы можете использовать только value.lval, доступ к другим членам данных недопустим и может приводить к непредсказуемому поведению программы. Причина этого в том, что юнионы хранят данные всех своих членов в одной области памяти и интерпретируют значение по разному исходя из имени, к которому вы обращаетесь. Размер памяти, выделяемой для юниона, соответствует размеру самого большого его члена-данных.

При работе с zval-ами используется специальная метка (type tag), которая позволяет определить какой тип данных хранится в юнионе в данный момент. Прежде чем обратиться к API давайте посмотрим какие типы данных поддерживаются в PHP и как они хранятся.

Простейший тип данных — IS_NULL: он не должен хранить какое-либо значение, так как это просто null.

Для хранения чисел PHP представляет 2 типа: IS_LONG и IS_DOUBLE, которые используют члены long lval и double dval соответственно. Первый используется для хранения целых чисел, второй — для чисел с плавающей точкой.

Есть несеколько вещей, которые вам следует знать о типе данных long. Во-первых, это signed integer, то есть он может содержать положительные и отрицательные значения, но этот тип данных не подходит для побитовых операций. Во-вторых, long имеет разные размеры на разных платформах: на 32-битных системах он имеет размер 32 бита или 4 байта, но на 64-битных системах он может иметь размер как 4, так и 8 байт. В Unix-системах он обычно имеет размер в 8 байт, в то время как в 64-битных версиях Windows использует только 4 байта.

По этой причине вы не должны полагаться на конкретное значение типа long. Минимальное и максимальное значения, которые могут быть сохранены в типе данных long доступны в константах LONG_MIN и LONG_MAX и размер этого типа может быть определен с использованием макро SIZEOF_LONG (в отличии от sizeof(long) этот макро может быть использован и в #if директивах).

Source: habrahabr.ru

Похожие публикации:

  1. Сайт Php
  2. Учебник
  3. Книга по Php
  4. Sql Обучение
  5. Язык Php

http://www.strekoza-tv.ru/

http://www.sklad-stroika.ru/

http://www.xtkolet.ru/

http://neumaticosdelvalle.com.ar/

http://www.nutrinormwellness.com/

http://misaelcardosoarquitetura.com.br/

http://www.zhenskaya-obuv.ru/

http://www.bezgemorroya.info/

http://www.libertarianguide.info/

http://www.joshuasophrin.com/

http://www.skdar.ru/

http://www.zbrass.eu/

http://scarletsails.net.ru/

http://www.promo-plates.info/

http://www.poiskvbelgorode.ru/

http://www.playbass.info/

http://www.forma-obratnoj-svjazi-joomla.ru/

http://www.tatrypt.eu/

http://www.naglfar.ru/

http://www.maddogsexpeditions.info/

http://www.culturalshowcase.info/

http://www.freehost96.ru/

http://www.aikidoofgreensboro.net/

http://www.dreammedicine.in/

http://www.furniturewood.ba/

http://www.miomasincirugia.com/

http://www.mobilidadept.com/

http://www.paylasimgida.com/

http://www.opalowy-sklad.pl/

http://www.mopro.at/

http://www.my247webhosting.com/

http://www.orator.biz/

http://www.munkagepmonitor.hu/

http://www.mp46katowice.pl/

http://www.mcedinstvo.ru/

http://www.naturalhigh.ro/

http://www.ozkayalarpaslanmaz.com/

http://www.moitruongminhhuy.com/

http://www.mutdaithanh.vn/

http://www.motosport.fr/

http://www.noormedicare.com/

http://www.thesmokingribs.com/

http://www.nationalagro.org/

http://www.homee.vn/

http://www.noithatdangcap.vn/

http://www.fureszaru.net/

http://maulin.com.tw/

http://www.olejnikjurajda.cz/

http://www.rednet24.pl/

http://www.rednetdom.pl/

http://www.nomia.md/

http://www.maycongcuthanhloc.com/

http://www.rednetconsulting.pl/

http://www.meritum-dom.pl/

http://www.medishopsk.sk/

http://www.medica-brno.com/

http://www.apprt.ru/

http://www.namingbranding.ru/

http://mehrallies.co.tz/

http://www.dom-abc.ru/

http://www.rgrt.ru/

http://www.bhagwanbhajan.com/

http://www.eurostroy-kazan.ru/

http://www.ulightdj.tv/

http://ehongshop.com.tw/

http://sinyetech.com.tw/

http://nhatranghouse.com.vn/

http://www.moviedj.tv/

http://www.koreadj.tv/

http://slin.com.tw/

http://www.awextaipei.com/

http://www.obotz.ca/

http://www.cohoip.com/

http://www.wawakening.org/

http://e-hong.com.tw/

http://uvtech.com.tw/

http://www.autotextsms.com/

http://ktorganic.com.vn/

http://www.gndpsbti.com/

http://bmhc.edu.bd/

http://amirmiahhsc.edu.bd/

http://forincorp.com.hk/

http://www.autorange.ru/

http://www.auto-azimut.ru/

http://www.autocentr-khimki.ru/

http://www.msn-com.de/

http://www.noithathoangquan.com/

http://www.mascort.pl/

http://www.mediawinwin.vn/

http://www.mineralspa.vn/

http://motospeed.com.vn/

http://www.pescons.vn/

http://sekolahgkps.or.id/

http://www.parkids.pt/

http://www.miraicare.vn/

http://www.nagyhazi.hu/

http://radioouvinte.com.br/

http://www.spiritsence.com/

http://www.tkseal.com/

http://www.jssfn.com/

http://www.mamaten.jp/

http://parkwaypiscinas.com.br/

http://www.dienmayvinhthuan.vn/

http://www.hnt-engineering.com/

http://www.namsontrongdoi.com/

http://www.vangiaphatdeco.com/

http://petrolchemical.com.vn/

http://www.shm-bk.com/

http://www.smougroup.ae/

http://www.muchos.pl/

http://www.ouremaquinas.pt/

http://podios.com.ar/

http://nanoilocal.go.th/

http://www.g-concier.com/

http://www.naturalcurefor.com/

http://www.spbnarcolog.ru/

http://www.limepuzzle.com/

http://www.workstyle365.com/

http://www.devoncommunication.sk/

http://www.skolafotografie.sk/

http://www.skadas.com/

http://obrabiarki.biz.pl/

http://www.nebensatz.com/

http://www.passerotti.pl/

http://man3tulungagung.sch.id/

http://www.mojanajkniha.sk/

http://www.nhatminhland.net/

http://niccs.co.jp/

http://www.farmersgardencafe-omelette.com/

http://www.wonderfullife.jp/

http://www.hopes-co.com/

http://www.mygongmo.com/

http://www.muoithanhphat.com/

http://www.ketquaxsmn.com/

http://www.dsprinting.id/

http://www.qinronmedia.com/

http://www.thehousemediagroup.com/

http://tnpcompany.com.vn/

http://www.mdx.vn/

http://www.manganhoa.com/

http://www.hollyparkstables.com/

http://www.my-flower.jp/

http://www.bkservis.sk/

http://www.metallo-snab.ru/

http://www.akbars-dynamo.ru/

http://www.promsnab-kazan.ru/

http://www.nawaplastic.com/

http://www.mamystore.com/

http://www.pensionod.com/

http://mtlrosario.com.ar/

http://www.pensiimaramures.ro/

http://www.michaelakokesova.cz/

http://www.mc2.lv/

http://www.mikrovlny.cz/

http://www.transfer.sk/

http://www.royallinks.in/

http://www.olive-pizzeria.com/

http://www.maxemocapital.com/

http://www.roycehelmet.com/

http://www.notredameschoolvasai.com/

http://www.opibg.it/

http://www.monday-portage-salarial.fr/

http://www.neareo.com/

http://oasiskaitak.com.hk/

http://www.alesklep.com/

http://www.noa-world.jp/

http://www.rotaseydisehir.com/

http://www.rusztowania-belchatow.pl/

http://www.e-salamander.pl/

http://mikona.com.pl/

http://www.prec-metal.pl/

http://www.viswabrahmanaeducationaltrust.com/

http://www.holyangelscollege.in/

http://www.kbcgarden.com/

http://www.jsminfotech.com/

http://www.northshorefinefoods.com/

http://www.setkaplastic.ru/

http://www.photog.ru/

http://www.geo-mir.ru/