1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/shirdonl-php-go

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Советы: вышла новая книга автора «Практический бой алгоритмов на языке Go с нуля», покупайте на JD.com и Dangdang!

Бесплатная библиотека с открытым исходным кодом: https://gitee.com/shirdonl/goAlgorithms

(Dangdang (🔥🔥🔥🔥🔥🔥 акция в процессе): https://product.dangdang.com/11726270217.html

(JD.com (🔥🔥🔥🔥🔥🔥 акция в процессе): https://item.jd.com/14101229.html

PHP bindings for Go

Этот пакет реализует поддержку выполнения PHP-скриптов, экспорта переменных Go для использования в контексте PHP, добавления приёмников методов Go в качестве классов PHP и возврата переменных PHP для использования в контексте Go.

Поддерживает PHP 5.x и PHP 7.x

Компиляция

Для сборки этого пакета необходимо установить PHP как библиотеку. Для большинства Linux-систем это обычно можно найти в пакете «php-embed» или его вариантах. Убедитесь, что библиотека PHP доступна, затем вы можете использовать «go build» для компиляции привязок и «go get».

Примечание: сборка с использованием PHP 5.x требует указания тега php5, например:

go get -tags php5 gitee.com/shirdonl/php-go

Это связано с тем, что PHP 7.x является целевой сборкой по умолчанию.

Статус

Выполнение PHP [файлов сценариев] и [встроенных строк] поддерживается и стабильно.

[Привязка значений Go] как переменных PHP разрешена для большинства базовых типов, а значения PHP, возвращаемые из eval'd строк, могут быть преобразованы и использованы в контекстах Go как значения interface{}.

Можно [прикрепить приёмники методов Go] в качестве классов PHP с полной поддержкой вызова экспортированных методов, а также получения и установки встроенных полей (для приёмников типа struct).

Предостережения

Обратите внимание, что по умолчанию PHP не предназначен для использования в многопоточных средах (что серьёзно ограничивает использование этих привязок с Goroutines), если он не собран с поддержкой ZTS. Однако поддержка ZTS претерпела значительные изменения между PHP 5 и PHP 7 и в настоящее время не поддерживается этим пакетом.

В настоящее время рекомендуется либо синхронизировать использование отдельных контекстов между Goroutines, либо совместно использовать один контекст среди всех запущенных Goroutines.

План развития

В настоящий момент пакет имеет несколько недостатков:

  • Поддержка ZTS/многопоточности. Это означает, что использование Go-PHP в Goroutines сильно ограничено.
  • Документация и примеры, как на уровне пакета, так и внешние.
  • Производительность. Нет причин полагать, что Go-PHP страдает от каких-либо серьёзных проблем с производительностью, но добавление тестов, особенно по сравнению с ванильным PHP, может помочь.
  • Ваш запрос функции здесь?

Эти пункты будут решены в порядке значимости (который может не соответствовать порядку, указанному выше).

Использование

Базовое

Выполнить скрипт просто:

package main

import (
    php "gitee.com/shirdonl/php-go"
    "os"
)

func main() {
    engine, _ := php.New()

    context, _ := engine.NewContext()
    context.Output = os.Stdout

    context.Exec("index.php")
    engine.Destroy()
}

Приведённый выше код выполнит файл сценария index.php, расположенный в текущей папке, и запишет любой вывод в io.Writer, назначенный Context.Output (в данном случае стандартный вывод).

Привязка и возврат переменных

Следующий пример демонстрирует привязку переменной Go к текущему контексту PHP и возврат переменной PHP для использования в Go:

package main

import (
    "fmt"
    php "gitee.com/shirdonl/php-go"
)

func main() {
    engine, _ := php.New()
    context, _ := engine.NewContext()

    var str string = "Hello"
    context.Bind("var", str)

    val, _ := context.Eval("return $var.' World';")
    fmt.Printf("%s", val.Interface())
    // Выводит 'Hello World' пользователю.

    engine.Destroy()
}

Строковое значение «Hello» прикрепляется с помощью Context.Bind под именем var (доступно в PHP как $var). Скрипт выполняется встроенным образом с помощью Context.Eval, объединяя прикреплённое значение со строкой PHP и возвращая его пользователю.

Наконец, значение возвращается как interface{} с помощью Value.Interface() (можно также использовать Value.String(), хотя в этом случае они эквивалентны).

Лицензия

Весь код в этом репозитории подпадает под условия лицензии MIT, полный текст которой можно найти в файле LICENSE. [Context.Exec]: [Context.Eval]: [NewValue]:
[NewReceiver]:

Введение

PHP связывает библиотеку golang, позволяя вам быстро вызывать PHP в Go. Добро пожаловать в проект, ставьте звёзды и делайте форки~ Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/shirdonl-php-go.git
git@api.gitlife.ru:oschina-mirror/shirdonl-php-go.git
oschina-mirror
shirdonl-php-go
shirdonl-php-go
master