本指南將嘗試介紹在 PHP-GTK 2 中使用面向對象編程。PHP 5 對面向對象的支持非常好,因此我們可以在開發 PHP-GTK 2 應用的時候可以使用面向對象的編程方式。
為什么使用面向對象編程非常流行?選擇這種編程方式有許多優點, 特別是如果你的程序被分為若干個模塊,并且會有成千上萬行代碼。 一個最重要的優勢在于代碼結構會更加清晰。 如果使用面向對象的方式編程編寫你的程序,你或者其他人閱讀和修改這些代碼時, 會比使用純粹的面向過程的編程方式容易許多。
如果你確信面向對象是正確的選擇,那么讓我們開始吧!
# 基本介紹
我將假設你已經熟悉使用面向對象編程,如果你不熟悉的話, 我建議在閱讀本指南之前先了解一下。你應當需要閱讀 PHP 5 的手冊關于面向對象的章節,這會讓你對此有更多的了解。
我們將使用面向對象的方式重新編寫簡單的“Hello World!”程序, 這樣你可以快速掌握要點。首先你必須創建一個類。最簡單的方式是從 PHP-GTK 2 已有的類中繼承一個你的類。現在,多數程序用 GtkWindow 作為它們最頂級的元件。我們的“Hello World!”程序也是如此。我們將要做的就是 繼承(extends)GtkWindow 創建一個類。這讓我們的工作容易許多:
~~~
class Hello extends GtkWindow{
}
~~~
現在我們需要設計這個類的構造函數(當這個類的對象創建時被調用的函數)。 讓我們考慮一下需要在構造函數中做些什么。由于構造函數是類的對象創建時第一個被調用的, 我們必須在其中設置程序的外觀。這意味著構造函數創建了所有需要的元件,設置布局(參考 擺放元件) 以及決定我們的應用將是怎樣呈現。
現在,從 GtkWindow 繼承這個類,但是這并不會自動調用 GtkWindow 的構造函數。這是 PHP5 默認行為,因此我們必須使用關鍵字 parent 顯式調用 GtkWindow 的構造函數:
~~~
class Hello extends GtkWindow{
function __construct(){
parent::__construct();
}
}
~~~
這意味著當我們的類 “Hello”的對象創建時,一個 GtkWindow 將會被創建(沒有參數被傳遞到構造函數)。現在問題是如何訪問新創建的窗口對象。 關鍵字 this 會幫助我們完成! 使用這個關鍵字可以訪問并修改新創建的窗口的所有內容:
~~~
function __construct(){
parent::__construct();
$this->set_title('歡迎光臨 Hello world');
$this->connect_simple('destroy', array('gtk', 'main_quit'));
}
~~~
由于這是一個非常簡單的程序,我們可以僅在構造函數中完成所有的任務。 僅僅將前面面向過程的程序中的代碼放到這個構造函數中。這是最終的程序:
# 例 1. Hello World —— 面向對象樣式
~~~
<?php
if(!class_exists('gtk')){
die("php-gtk2 模塊未安裝 \r\n");
}
class Hello extends GtkWindow{
function __construct(){
parent::__construct();
$this->set_title('歡迎光臨 Hello world');
$this->connect_simple('destroy', array('gtk', 'main_quit'));
$this->connect_simple('destroy',array('gtk', 'main_quit'));
$lblHello=new GtkLabel("歡迎使用 PHP-GTK !\r\n'Hello world!'");
$this->add($lblHello);
$this->show_all();
}
}
new Hello();
Gtk::main();
?>
~~~
最后運行我們的程序,跟以前的Hello world程序結果一樣,如圖所示。

盡管這個例子并不能很全面的演示使用面向對象的方法編程, 但是它總是應該能幫助你有一個開端。我們現在將進一步了解更加高級的概念。
- 前言
- 安裝打包發行
- 安裝方法
- 打包 exe
- 不用設置環境變量打包
- 發布 helloworld 軟件
- 調試以及替換圖標
- Helloworld 分析
- PHP-GTK Hello world 高級程序
- PHP-GTK Hello Glade
- 加載 glade 文件
- 加載 .glade 文件的一部分
- GTK、Pango 和支持庫
- PHP-GTK布局排版
- 盒子 GtkHBox 和 GtkVBox
- 使用 GtkTable 實現表格狀布局
- 固定布局
- PHP-GTK面向對象編程
- 更加復雜的例子
- PHP-GTK 面向對象概述
- PHP-GTK 信號句柄
- 信號
- 回調和信號句柄
- 連接信號和信號句柄
- 事件
- 總結
- GtkTreeView 教程(基礎)
- 模型: GtkTreeModel 和 GtkTreeStore
- 視圖: GtkTreeView, GtkTreeViewColumn, GtkCellRenderer
- PHP-GTK全貌
- 類繼承關系
- PHP-GTK 2 中鍵的符號化名稱
- PHP-GTK 類列表
- PHP-GTK 函數和方法
- PHP-GTK 字段和屬性
- PHP-GTK 信號
- PHP-GTK 枚舉和標志值
- PHP-GTK頂層
- GtkWindow頂層
- GtkDialog頂層
- GtkAboutDialog頂層
- GtkColorSelectionDialog頂層
- GtkFileChooserDialog頂層
- GtkFontSelectionDialog頂層
- GtkInputDialog頂層
- GtkMessageDialog頂層
- GtkRecentChooserDialog頂層
- GtkAssistant頂層
- PHP-GTK容器
- GtkHBox容器
- GtkVBox容器
- GtkTable容器
- GtkNotebook容器
- GtkFrame容器
- GtkAspectFrame容器
- GtkMenuBar容器
- GtkToolbar容器
- GtkHPaned容器
- GtkVPaned容器
- GtkHButtonBox容器
- GtkVButtonBox容器
- GtkLayout容器
- GtkFixed容器
- GtkEventBox容器
- GtkExpander容器
- GtkViewport容器
- GtkScrolledWindow容器
- GtkAlignment容器
- PHP-GTK控制和顯示
- GtkButton按鈕
- GtkToggleButton雙態按鈕
- GtkCheckButton復選按鈕
- GtkSpinButton Spin按鈕
- GtkRadioButton單選按鈕
- GtkFileChooserButton文件選擇按鈕
- GtkColorButton顏色按鈕
- GtkFontButton字體按鈕
- GtkLinkButton銜接按鈕
- GtkImage圖像
- GtkLabel標簽
- GtkAccelLabel快捷鍵列表
- GtkEntry文本條目
- GtkTextView文本視圖
- GtkHScale水平比例
- GtkVScale垂直比例
- GtkHScrollbar水平滾動條
- GtkVScrollbar垂直滾動條
- GtkComboBox組合框
- GtkComboBoxEntry組合框條目
- GtkProgressBar進度條
- GtkTreeView樹視圖
- GtkIconView圖標視圖
- GtkHandleBox可移動的框
- GtkStatusbar狀態欄
- GtkCalendar日歷
- GtkMenu彈出式菜單
- GtkHSeparator水平分割線
- GtkVSeparator垂直分割線
- GtkArrow箭頭
- GtkDrawingArea繪圖區域
- GtkRecentChooserWidget最近選擇器
- GtkFileChooserWidget文件選擇元件
- Gtk+ 過時元件
- APP開發基礎
- 元件和對象
- 父元件和子元件
- APP開發事件和信號
- 事件和信號
- 監聽新的事件
- APP開發啟動并運行
- 窗口和其它頂級元件
- 窗口的位置和尺寸
- 模態窗口
- 窗口標題
- Gtk循環
- PHP-GTK總結