расширения(модули) php написаны на С , как и все PHP, что указано в PHP Coding Standards. расширения реалезуются в форме dll библиотек в винде. это значит , что ядро языка php может читать dll формат. так почему я не могу или могу, я не знаю,подключить API C libmysql.dll и написать в php.ini extension=libmysql.dll, что является прямым доступом к API C Mysql,а не работать через биндинг mysqli.dll?
если я использую биндинг mysqli.dll. мой php код вызовет функцию func(), для работы с Mysql, ядро языка найдет эту функцию func() в mysqli.dll и передаст ей работу. Так вот, что эта функция func() начнет делать, прежде чем передать работу API C libmysql.dll?
как я понимаю, она в результате вызовет функцию API C в libmysql.dll.
Valick
27.01.2014 - 23:03
Цитата |
так почему я не могу или могу, я не знаю,подключить API C libmysql.dll |
попробуйте в жигули, движок от мерседеса запихнуть
_____________
Стимулятор ~yoomoney - 41001303250491
Цитата |
попробуйте в жигули, движок от мерседеса запихнуть |
ты знаешь конкретно почему нельзя или знаешь на уровне жигули?))
vasa_c
28.01.2014 - 17:03
Начнём издалека.
Вот написали в похапе коде вызов: kakayato_funciya_iz_libmysql(), как похапе узнает что ему нужно вызвать некую функции из некого dll и что ему туда передавать?
_____________
Блог ГО |
Таблица символов Юникода |
Графомания
Цитата |
Вот написали в похапе коде вызов: kakayato_funciya_iz_libmysql(), как похапе узнает что ему нужно вызвать некую функции из некого dll и что ему туда передавать? |
как я думаю, в случае объектно-ориентированого стиля, ядро php когда встретит функцию kakayato_funciya_iz_libmysql() должна будет найти соответстующий класс в котором эта функция, проверить правильность вызова ее и определить список параметров. затем просмотреть подключаемые расширения в php.ini и найти реализацию этой функции и передать ей параметры и управление.
в случае процедурного стиля ядро тоже должно как-то проверять на правильность вызова функции, а затем снова искать в расширениях и передавать управление расширению.
vasa_c
29.01.2014 - 10:30
Да. Но для этого нужно иметь список всех зарегистрированных в пыхе функций-классов-методов.
И передавать в качестве аргументов и результата нужно пхп-шные структуры, которые даже для примитивных типов отличаются от того, что понимает простая сельская libmysql.
И таки нам нужна прослойка, которая говорила бы пыху какие функции есть и преобразовывала структуры данных между пыхом и libmysql.
_____________
Блог ГО |
Таблица символов Юникода |
Графомания
Цитата |
И таки нам нужна прослойка, которая говорила бы пыху какие функции есть и преобразовывала структуры данных между пыхом и libmysql. |
ты первый человек , который заговорил о структурах данных и их различия в языках программировании, а так же важен еще порядок передачи данных. я как бы тоже до этого додумался.)
но есть несколько уточняющих моментов.
1. ты имеешь ввиду прослойка -это реализация интерфейса класса написанного на php и входящая в состав Pear?
2. биндинг(расширение,модуль) mysqli.dll, для работы с Mysql, сам написан на языке С, согласно PHP Coding Standards. поэтому когда пхп-шное ядро встретит функцию kakayato_funciya_iz_mysqli() из mysqli.dll, ядро при передачи управления функции kakayato_funciya_iz_mysqli() уже должно будет преобразовать структуры данных пхп-шные в С-шные, потому как расширение mysqli.dll написано на С. Если следовать этой логике, то получается, что ядро преобразует данные, потом биндинг снова преобразует данные и затем совершается вызов С-шной функции из libmysql.
в чем ошибка моих рассуждениях, если я не прав?
vasa_c
30.01.2014 - 14:39
Пых написан на Ц. Его данные реализуются в виде сишных структур.
Расширения работают с этими структурами.
libmysql этих структур не понимает.
php_mysql конвертирует их в понятные для libmysql.
_____________
Блог ГО |
Таблица символов Юникода |
Графомания
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.