韌館-LearnHouse

Archive for 15 9 月, 2007

[PHP]foreach

內容來源:LINK     (此篇文章僅供站長備份參考用,固為加密文章)

PHP 4(不是 PHP 3)包括了 foreach 結構,和 Perl 以及其他語言很像。這只是一種遍歷陣列簡便方法。foreach 僅能用於陣列,當試圖將其用於其它資料型別或者一個未初始化的變數時會產生錯誤。有兩種語法,第二種比較次要但卻是第一種的有用的擴展。

foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement

第一種格式遍歷給定的 array_expression 陣列。每次循環中,當前單元的值被賦給 $value 並且陣列內部的指針向前移一步(因此下一次循環中將會得到下一個單元)。

第二種格式做同樣的事,只除了當前單元的鍵值也會在每次循環中被賦給變數 $key

 

註: foreach 開始執行時,陣列內部的指針會自動指向第一個單元。這意味著不需要在 foreach 循環之前呼叫 reset()

 

註: 此外注意 foreach 所操作的是指定陣列的一個拷貝,而不是該陣列本身。因此即使有 each() 的建構,原陣列指針也沒有變,陣列單元的值也不受影響。

註: foreach 不支援用“@”來禁止錯誤訊息的能力。

你可能注意到了以下的代碼功能完全相同:

reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>n";
}

foreach ($arr as $value) {
echo "Value: $value<br>n";
}

以下代碼功能也完全相同:

reset ($arr);
while (list($key, $value) = each ($arr)) {
echo "Key: $key; Value: $value<br>n";
}

foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value<br>n";
}

示範用法的更多例子:

/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
print "Current value of $a: $v.n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach($a as $v) {
print "$a[$i] => $v.n";
$i++;
}

/* foreach example 3: key and value */

$a = array (
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
);

foreach($a as $k => $v) {
print "$a[$k] => $v.n";
}

/* foreach example 4: multi-dimensional arrays */

$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach($a as $v1) {
foreach ($v1 as $v2) {
print "$v2n";
}
}

/* foreach example 5: dynamic arrays */

foreach(array(1, 2, 3, 4, 5) as $v) {
print "$vn";
}
2007年9 月 posted by admin in 程式&軟體 and have Comment (1)

[PHP]全域變數-global

內容來源:Link    (此篇文章僅供站長備份參考用,固為加密文章)

變數的範圍即它定義的上下文背景(譯者:說白了,也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 引入的文件。範例:

<?php
$a = 1;
include "b.inc";
?>

這裡變數 $a 將會在包含文件 b.inc 中生效。但是,在用戶自定義函式中,一個局部函式範圍將被引入。任何用於函式內部的變數按預設情況將被限制在局部函式範圍內。範例:

<?php
$a = 1; /* global scope */

function Test()
{
echo $a; /* reference to local scope variable */
}

Test();
?>

這個腳本不會有任何輸出因為 echo 語句引用了一個局部版本的變數 $a, 而且在這個範圍內,它並沒有被設值。你可能注意到 PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函式中自動生效,除非被局部變數覆蓋。這可能引起一些問題,有些人可能漫不經心的改變一個全域變數。 PHP 中全域變數在函式中使用時必須申明為全域。例如:

<?php
$a = 1;
$b = 2;

function Sum()
{
global $a, $b;

$b = $a + $b;
}

Sum();
echo $b;
?>

以上腳本的輸出將是 "3"。在函式中申明了全域變數 $a$b,任何變數的所有引用變數都會指向到全域變數。對於一個函式能夠申明的全域變數的最大個數,PHP 沒有限制。

在全域範圍內連接變數的第二個辦法,是用特殊的 PHP 自定義 $GLOBALS 陣列。前面的例子可以寫成:

<?php
$a = 1;
$b = 2;

function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}

Sum();
echo $b;
?>

$GLOBALS 陣列中,每一個變數為一個元素,鍵名對應變數名,值變數的內容。$GLOBALS 之所以在全域範圍內存在,是因為 $GLOBALS 是一個 superglobal 變數。

2007年9 月 posted by admin in 程式&軟體 and have No Comments

[Java]autoboxing與unboxing

內容來源良葛格學習筆記    (此篇文章僅供站長備份參考用,固為加密文章)
 

在Java中,所有您要處理的東西「幾乎」都是物件(Object),例如您之前所使用的Scanner是物件,字串(String)是物件,您之後還會看到更多的物件。

然而有些是例外,基本(Primitive)資料型態不是物件,也就是您使用int、double、boolean等宣告的變數,以及您在程式中直接寫下的字面常量。

使用Java有一段時間的人都知道,有些時候您需要將基本型態轉換為物件,例如使用Map時,要使用put()方法時需要的是物件而不是基本型態。

您要使用包裹型態(Wrapper Types)才能將基本資料型態包裝為物件,例如在 J2SE 1.4.2 之前,您要如下才能將int包裝為一個Integer物件:

Integer integer = new Integer(10);

J2SE 5.0 之後您可以這麼寫:

Integer integer = 10;

事實上編譯器在背後自動根據您寫下的陳述,為您進行自動裝箱(Autoboxing)動 作,同樣的動作可以適用於 boolean、byte、short、char、long、float、double等基本型態,分別會使用對應的包裹型態(Wrapper Types)Boolean、Byte、Short、Character、Integer、Long、Float或Double。

自動裝箱運用的方法還可以如下:

int i = 10;
Integer integer = i;

 
您也可以使用更一般化的Number,例如:

Number number = 3.14f;

3.14f會先被自動裝箱為Float,然後指定給number。

J2SE 5.0中可以自動裝箱,也可以自動拆箱(Unboxing),例如下面這樣寫是可以的:

Integer fooInteger = 10;
int fooPrimitive = fooInteger;

 
在運算時,也可以自動裝箱與拆箱,例如:

Integer i = 10;
System.out.println(i + 10);
System.out.println(i++);

上例中會顯示20與10,編譯器會自動幫您進行自動裝箱與拆箱,即10會先被裝箱,然後在i + 10時會先拆箱,進行加法運算;i++該行也是先拆箱再進行遞增運算。再來看一個例子:

Boolean boo = true;
System.out.println(boo && false);

同樣的,先將boo拆箱,再與false進行AND運算,結果會顯示false。

2007年9 月 posted by admin in 程式&軟體 and have No Comments