發表文章

PHP:常數

PHP 中的常數必須要在類別內容之外,使用 define() 函式或 const 關鍵字來定義,而且一但定義完成,就不可再更改其值。如下: <?php define("CONSTANT_1", "Hello world."); const CONSTANT_2 = 'Hello World'; echo CONSTANT_1; // outputs "Hello world." echo Constant_1; // outputs "Constant" and issues a notice. echo CONSTANT_2; // outputs "Hello world." ?> 與其他變數不同,在使用常數時,前面並不需要加上 $ 符號。 constant("name"):回傳一個名稱叫做 name 的常數的值。 get_defined_constants(boolean):回傳一個包含目前所有已定義的常數的陣列,包含系統定義以及使用者自訂的。可以透過設定 true 或 false 來決定回傳的陣列要不要進一步將常數分門別類。

PHP:變數範圍

PHP 中的變數有著單一的存取範圍,也就是它定義時所在的範圍;如果在函數外定義,則為全域變數 (global variables),整個 PHP 頁面的地方都可以使用到此變數,包含被 required 及 included 的檔案中也行;但若是定義在函式中的,則稱本地變數 (local variables),在該函式之外的地方即無法使用。 但與 C-like 語言不同的地方是,若你在函數外定義了某個變數,在函數內沒有先定義而直接使用了一個同樣名稱的變數時,PHP 會將 函數內的那個視為新定義的變數 ,而不是沿用那個同名的全域變數;除非你以 global 關鍵字或 $GLOBALS 陣列來指定你的確要在函數中使用全域變數: <?php $a = 1; $b = 2; function test(){   // 指向一個新定義的本地變數,因尚未指定初值,所以不會印出東西   echo $a; } function Sum1(){   //使用 global 關鍵字說明這兩個變數是指向全域變數的   global $a, $b;   $b = $a + $b; } function Sum2(){   //使用 $GLOBALS 陣列指定全域變數   $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } ?> PHP 中的靜態 (static) 變數只能在函式中使用;靜態變數的值在程式離開函式後還會繼續保留,而且如果試圖以運算式的結果來初始化靜態變數時會產生錯誤。 <?php function foo(){   static $int = 0; // correct   static $int = 1+2; // wrong (as it is an expression)   static $int = sqrt(121); // wrong (as it is an expression too)   //$int 的值在每次 foo() 被呼叫時都會加 1   $int++;   echo $int; } ?>

PHP:callback函數的使用

PHP 中有某些函數允許使用使用者定義的函數來作為參數,例如:call_user_func()、usort()。 如果想呼叫的是某物件的方法時,其參數則必須是一個包含兩個元素的陣列,index 為 0 的元素為欲呼叫其方法的物件變數,index 為 1 的元素則是方法名。 以下是使用的例子: <?php // An example callback function function my_callback_function() {   echo 'hello world!'; } // An example callback method class MyClass {   static function myCallbackMethod() {     echo 'Hello World!';   } } // Type 1: Simple callback call_user_func('my_callback_function'); // Type 2: Static class method call call_user_func(array('MyClass', 'myCallbackMethod')); // Type 3: Object method call $obj = new MyClass(); call_user_func(array($obj, 'myCallbackMethod')); // Type 4: Static class method call (As of PHP 5.2.3) call_user_func('MyClass::myCallbackMethod'); // Type 5: Relative static class method call (As of PHP 5.3.0) class A {   public static function who() {     echo "A\n";   } } class B extends A {   public static function who() {     echo "B\n...

PHP常用函數:陣列(array)

如果初始化為 $arr = array(1, 2, 3, 4, 5); $arr[] = 10; 插入一個 index 為 5,value 為 10 的元素。 $arr["x"] = 18; 插入一個 index 為字串 "x",value 為整數 18 的元素。 count($arr) :計算陣列裡的元素個數。 unset($arr[1]) :去掉 index 為 1 的元素 unset($arr) :將整個陣列清空,但之後如果再加入元素,其 index 是往上累加的,而非從 0 開始。 print_r($arr) :(print human-readable)印出對人們來說較易讀的變數資訊,如果傳入的變數是陣列,則會將其中的 key-value 全都印出來。 array_values($arr) :由於用 unset() 去掉陣列的元素後 index 可能會很混亂,此時可用 array_values() 函數來重整 index。 <?php $a = array(1 => 'one', 2 => 'two', 3 => 'three'); unset($a[2]); /* will produce an array that would have been defined as $a = array(1 => 'one', 3 => 'three'); and NOT $a = array(1 => 'one', 2 =>'three'); */ $b = array_values($a); // Now $b is array(0 => 'one', 1 =>'three') ?> (array) $scalarVar , array($scalarVar) :兩者都是將某個數字換字串型別的變數 $scalarVar 轉成一個只具有一個元素,其 index 為 0,value 為 $scalarVar 的陣列。 array_diff($arr1, $arr2, ...) :回傳一個陣列,...

JavaCard 開發時需注意的小地方

1. JavaCard Development Toolkit (後稱 JCDK)中有非常多的工具都是批次檔 (.bat);即便Windows 現在不管在命令列或環境變數中對於路經空格的處理已經不錯了,但當這些批次檔裡處理到的路徑如果還是有空格時,依然會出現下方的錯誤: 'C:\Program' 不是內部或外部命令、可執行的程式或批次檔。 所以欲使用 JCDK 時,請注意您 JAVA_HOME(安裝JDK的路徑) 與 JC_HOME(放置JavaCard dk路徑) 變數中不能出現空格。 2. JCDK 2.2.1版的各工具只支援到 JDK 1.4.1版,1.4.1至1.5間版本未確定,但JDK 1.5以上版本確定無法使用,在 convert 階段就會出現 .class 檔版本無法支援的錯誤。

JavaFX介紹

圖片
什麼是JavaFX? JavaFX實際上不是一種語言,而是Sun Microsystem為了建立RIA (Rich Internet Application; 豐富網路應用程式) 而推出的產品組合;目前預計的成員包括:JavaFX Script、JavaFX Mobile、JavaFX TV。其中,JavaFX Script (幾乎能算是) 一種新的程式語言,目前大家所在討論的 JavaFX 大多是指 JavaFX Script;而 JavaFX Mobile 及 JavaFX TV 則像目前相當火紅的 Android 一樣,是在特定裝置上設計的平台,而非程式語言。而我們在未來的介紹與教學中,幾乎都是指 JavaFX Script 語言。 但不管是哪一個 JavaFX 產品,他們被設計出來的最大目的就是要讓程式的 介面 與 內部邏輯設計 上能更加配合,並使得內部程式設計師與介面設計者的合作能更輕鬆緊密;JavaFX Script 就是為了簡化目前 Java 程式的介面開發所設計出來的。 此外,JavaFX Script 標榜的另一大賣點是在學習上,完全不需要懂 Java Swing 以及 Java 2D 等工具 JavaFX Script 語言的特點 JavaFX Script 與傳統 Java 語言有許多不同之處,關於這些,大家應該也很容易在網路可以找到相關的說明;筆者在此也稍作一下介紹,讓大家在等等的學習上能有點心理準備: ) Declarative, statically-typed scripting language Facilitates rapid GUI development Many cool, interesting language features Runs on Virtual Machine for the Java™ platform Deployment options same as Java programs Fully utilizes Java class libraries behind the scenes JavaFX Script 與傳統 Swing 的比較 我們來看看下面這個簡單的使用者介面: HelloFrame.java import javax.swing.*; public class HelloFrame...

在 Android 平台上取得裝置資訊

圖片
最近作的東西必須要取得裝置上的一些資訊,但如果直接拿的話,一定會遇到錯誤訊息,大概會像下面這樣: 查了一下才知道,這是 Android 平台的安全機制作祟:任何會影響到其他程式、作業系統、或使用者操作的行為,都會被系統所管制,例如:讀取使用者自己的資料 (電話部或簡訊)、使用其他程式所建立的檔案、或執行網路的存取等。除非在安裝程式時有得到使用者的「許可」(permission) 才能操作;而這個所謂「得到使用者的許可」,就是要 在程式的 AndroidManifest.xml 檔案中加入 uses-permission 的子元素 ,以說明這個程式在未來會用到哪些特殊的功能;如果使用者要安裝使用此程式的話,就必須同意程式未來的存取動作。而這些動作一但設定好,並安裝進手機上就不會再有所變動。 想知道有哪些動作是必須先經過設定 uses-permission 才能使用的,可以參照此網頁: android.Manifest.permission 其中每一行都是原本我們不能使用,但可以改變其設定的操作,例如: " android.permission.ACCESS_COARSE_LOCATION " - 能允許我們取得手機目前連線的ap位置, " android.permission.READ_PHONE_STATE " - 可以讀取手機目前的狀態, " android.permission.READ_SMS " - 可以讀取簡訊內容, " android.permission.WRITE_CONTACTS " - 可以寫入電話簿內容,但無法讀取。 (注意!上述最後兩項設定都只有設定「讀取」與「寫入」動作而已,若你的程式對這些資料同時有「讀」和「寫」的需求時,就必須個別設定!) 以下是讀取一些手機資訊的範例: public class InfoRetriever extends Activity {   private TextView locationText;   private TextView numberText;   private TextView simText;   @Override   public void onCreate(Bundle savedInstanceS...