[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP,binding,Mysql
relav
расширения(модули) 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
Цитата
так почему я не могу или могу, я не знаю,подключить API C libmysql.dll

попробуйте в жигули, движок от мерседеса запихнуть

_____________
Стимулятор ~yoomoney - 41001303250491
relav
Цитата
попробуйте в жигули, движок от мерседеса запихнуть


ты знаешь конкретно почему нельзя или знаешь на уровне жигули?))
vasa_c
Начнём издалека.
Вот написали в похапе коде вызов: kakayato_funciya_iz_libmysql(), как похапе узнает что ему нужно вызвать некую функции из некого dll и что ему туда передавать?

_____________
Блог ГО | Таблица символов Юникода | Графомания
relav
Цитата
Вот написали в похапе коде вызов: kakayato_funciya_iz_libmysql(), как похапе узнает что ему нужно вызвать некую функции из некого dll и что ему туда передавать?



как я думаю, в случае объектно-ориентированого стиля, ядро php когда встретит функцию kakayato_funciya_iz_libmysql() должна будет найти соответстующий класс в котором эта функция, проверить правильность вызова ее и определить список параметров. затем просмотреть подключаемые расширения в php.ini и найти реализацию этой функции и передать ей параметры и управление.

в случае процедурного стиля ядро тоже должно как-то проверять на правильность вызова функции, а затем снова искать в расширениях и передавать управление расширению.
vasa_c
Да. Но для этого нужно иметь список всех зарегистрированных в пыхе функций-классов-методов.
И передавать в качестве аргументов и результата нужно пхп-шные структуры, которые даже для примитивных типов отличаются от того, что понимает простая сельская libmysql.
И таки нам нужна прослойка, которая говорила бы пыху какие функции есть и преобразовывала структуры данных между пыхом и libmysql.

_____________
Блог ГО | Таблица символов Юникода | Графомания
relav
Цитата
И таки нам нужна прослойка, которая говорила бы пыху какие функции есть и преобразовывала структуры данных между пыхом и 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
Пых написан на Ц. Его данные реализуются в виде сишных структур.
Расширения работают с этими структурами.
libmysql этих структур не понимает.
php_mysql конвертирует их в понятные для libmysql.


_____________
Блог ГО | Таблица символов Юникода | Графомания
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.