Как стать автором
Обновить

Комментарии 20

У gtk есть менее многословные биндинги. Оно конечно занимательно, но вот реальных desktop-проектов на php я не встречал. Есть какие-нибудь интересные примеры? Гугление showcases выдает какие-то калькуляторы…
Существует RAD-среда DevelNext, в которой десктопные программы пишутся на JPHP — аналоге PHP, компилируемом в байт-код для JVM. UI построен на JavaFX. Есть возможность писать свои расширения на Java — к примеру, я реализовал в несколько строк подхват сторонних DLLок через JNA. К сожалению, автор компилятора и среды позиционирует свой продукт, как решение для начинающих программистов, поэтому вместо нормального редактора файлов проекта, предпочтение отдаётся всевозможным drag&drop конструкторам. Вероятно, со временем это изменится.

Скриншот

В далёком 2011 делал вот такое чудище на php:
Скриншот
http://wxmaper.ru/images/kvvkdb-0-3.png

В паблике этой программы нет. Из более свежего есть вот такое:
Еще скриншот
https://pp.vk.me/c637623/v637623446/fbe1/GyGXf2tCmQ4.jpg

Думаю на пхп мало программ из-за того, что до сих пор популярен этот стереотип о непригодности PHP ни для чего, кроме как для «сайтиков». Приложения делают на HTML+js и никого не смущает что это все рисуется в браузере, но вот фраза «писать гуй на пыхе» почему то вызывает у многих недоумение. Мне это не понятно. От части свою роль играет факт отсутствия нормальной GUI библиотеки. Не будешь же для каждого приложения на пхп писать расширение с привязкой к сишному gtk.
Первая программа случайно не на PHP Devel Studio написана? Иконка очень напоминает логотип Soul Engine.
В точку, это был именно он.
Второй скрин очень симпатичен. Я не предубежденный противник php, я на нем по работе иногда пишу. Сайты, да. А десктопные gui я писал много на чем, но не на php, сложилось впечатление, что нормальных либ толком нет.

Думаю php привычен для сайтов в большей степени ровно из-за всяких $_SERVER, $_POST и иже с ними.
Библиотека неплохая, вот только поддерживаеться только за денежку. Пару раз наступил на баги или отсутсвие функциональности (например отсуствие возможности устанавливать статические переменные) и никакого ответа от разроботчиков…
В смысле устанавливать статические переменные? как параметры класса?
аналог PHP кода:

<?php 

class A {
   static $a = null;
   public function getA(){
      self::$a = new A(); // << вот этого нет
      return self::$a;
   }

}
Эмулятор $this?
Return this;? В примере не то.
например отсуствие возможности устанавливать статические переменные

так вы попробуйте в документацию заглянуть.
#include <phpcpp.h>
class YourCustomClass : public Php::Base {};
extern "C" {
    PHPCPP_EXPORT void *get_module() {
        static Php::Extension ext("YourCustomExtention", "1.0");
        Php::Class<YourCustomClass> cl("YourCustomClass");
        cl.property<YourCustomClass>("staticProperty", std::nullptr, Php::Static);
        ext.add(std::move(gtk));
        return ext;
    }
}

<?php 
class YourCustomClass {
   static $staticProperty = null;
}
Это вы задекларировали, а попробуйте поменять это значение в какомто методе…
Не сразу увидел ваше дополнение. Да, кажется, доступ к статическим полям не реализован. Его, кстати, не так уж и сложно реализовать. Я примерно представляю как это можно сделать. Просто это никому не было нужно.
Что касается вашего примера, то у вас статическое поле торчит наружу. Это не очень хорошо с точки зрения архитектуры. И, возможно, требуется рефакторинг. Попробуйте в вашем примере заменить static $a на private static $a и проблема сразу исчезнет.
А вообще, опишите исходную задачу, попробую накидать решение.
В настоящий момент в библиотеке есть практически все для решения основных задач, возникающих при написании расширений.
оффтопик
Правильно ли я понимаю, что когда выводят графику на десктопе на многих других языках программирования, например, на pyton, по сути используют такие же библиотеки и методы? То есть это универсальные методы, несколько отличается только реализация для разных языков?

Да, там зачастую одни и те же библиотеки под капотом. Библиотеки зачастую пишутся так, чтобы функции были доступны через FFI. Тогда их можно использовать из других языков, создавая специфичную для данного языка, обёртку.

Если обобщить вообще для всех языков, 99% процентов внешнего взаимодействия прикладных программ осуществляется посредством вызова syscall's — «универсальных методов», реализуемых самой операционной системой =) касательно графики, да — везде используются одни и те же исполнители — графические драйвера
Да опечатка
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории