韌館-LearnHouse

Archive for the '程式&軟體' Category

[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

Here are my pictures from my vacation

MSN又出現新的變種病毒了,這支蠕蟲已有好幾個變種

今天早上醒來,發現從同學的MSN傳來一些訊息

當時我也沒注意到那串字,只注意到下面的一個檔案myalbum2007.zip

以為是他暑假去玩的照片,所以不假思索的就下載了!! 

 

 

 

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

Allowed memory size of 8388608 bytes exhausted

一直以來發現在發表迴響或新增文章時

有時候都會出現:

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 393216 bytes)

但有時候卻又很正常而不會顯示這類的錯誤

本來想說反正出現錯誤也有正常發表,所以就沒管它了

今天有空就來給他看一下這問題出在哪

按照Allowed memory size of 8388608 bytes exhausted這句簡短的語句來判斷

應該不難找出問題點,大意就是說允許記憶體大小比8388608 bytes多一點

所以問題應該出現在記憶體給的不夠大吧!!

原來是memory_limit 的預設值通常為 8M,而LifeType需要約8.3M

所以啦!!就把它改大一點就沒事囉!!由於這個錯誤是隨機的,有時候會很正常

所以如果還有人在我的網誌中迴響時出現錯誤時,麻煩回報一下!!

好啦!!廢話不多說,來說一下有哪些改善的方法:

  1. 自架主機
  2. 如果是自己架站的話,管理員的權限是最大的,修改php.ini檔裡的memory_limit,可以設定memory_limit = 16M(或更大)

  3. 虛擬主機
  4. 修改 .htaccess 檔,新增一段語法php_value memory_limit 16M(或更大)

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

MSN病毒???

終於專題快要告一段落了

由於一直在學校,所以在家裡的電腦一直都開著,MSN也一直在線上 

今天回家看到友人的MSN訊息

內容很奇怪,並不像對方會傳給我的訊息

我還以為是她男朋友在搞鬼 

以下是MSN的訊息內容(紅色的網址千萬不要點)

= 言每 =I am who I am=我的人生?(其實我不在) 說:

十大最完美的東瀛女优
http://www.lyadsl.com/index.com
= 言每 =I am who I am=我的人生?(其實我不在) 說:

搞笑動物照片,笑破肚皮ㄛ!!
http://www.lyadsl.com/index.com

------------------------------------------------------------- 

今天2007/5/6,又收到另外一個同學MSN訊息

新年快樂 說:

安!真神奇,三個頭的小豬  http://shihao.w207.bizcn.com/index.com  見過ㄇ?
新年快樂 說:

安!微軟台灣近日民調大派送.只需下載填寫完畢發送指定郵箱就有機會獲得五千美元大獎.卡緊去看看  http://shihao.w207.bizcn.com/index.com
新年快樂 說:

安!今天在網路上看到了這個,太神奇了.快去看看咩!  http://shihao.w207.bizcn.com/index.com  舌頭居然可以舔到自己的額頭!酷!!!
新年快樂 說:

印度發現世界首個三連體嬰兒  http://shihao.w207.bizcn.com/index.com   


當初沒仔細看還沒看出有什麼異常

後來順手就點一下發現,竟然是要我下載一個檔案

這時才仔細看網址,原來是一個.com的檔案

就我的直覺,就知道這個一定不是很友善的網址了

所以本能的就取消下載, 用網址輸入http://www.lyadsl.com

網站會跳出一個java script的視窗,根據視窗的亂碼判定,應該是大陸的GB編碼

然後幫你轉向到另外一家申請網域的公司。

奉勸各位最近有接收到這個網址的人千萬別下載,可能是你的朋友中毒了!! 

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