Java對大小寫很「敏感」,所以先來說「命名規則」
識別子(Identifier),因為用來識別,所以名稱必須要有意義
首先
第一個字必須是文字、或用_、$
第二個字起可以用文字、數字、_、&
不可與Java關鍵字相同
大小寫有別,但沒有長度上限
再來
套件(Package),以小寫英文命名,例com.uuu.domin
類別(Class)、介面(Interface)、列舉型別(enum),字母開頭為大寫英文的名詞或片語,例SavingsAccount
方法(Method),字母開頭為小寫英文的動詞,並限制_底線的使用,例getAccount()
區域(Local)變數,簡短有意義可適當使用縮寫,例buf代表buffer
成員變數,第一個字母應小寫,亦使用混合模式,例currentCustomer, maxSize
常數,全部使用大寫,以底線斷詞,例HEAD_COUNT
那麼,方法和成員變數很像,該怎麼區分他們?
從名字後方有沒有(),如果有( )表示是一個方法;若沒有則為變數名稱
2011年12月29日
[Java]Java技術概論與環境設定_20111212
(以下敘述純粹是上課筆紀,內容或我理解有錯請糾正,謝謝!)
Java是一種技術,並非單指一種程式語言
它有以下特性(三跨.....嗯~不是指胯下喔="=)
跨平台
跨設備
跨廠商
語法類似C++,支援多個執行緒
Java是一種技術,並非單指一種程式語言
它有以下特性(三跨.....嗯~不是指胯下喔="=)
跨平台
跨設備
跨廠商
語法類似C++,支援多個執行緒
2011年9月2日
[AS3.0]Dictionary的介紹與使用
Dictionary
簡單來說跟 Object 和 Array 是做一樣的事。
是用來索引物件用的類別。
Array是用數字來當做 Key 值。_array[0] = "字串1";
_array[1] = "字串2";
當
_array[0] = "字串3";
時, 本來的值就會被取代掉
trace(_array[0]) //得到 字串3
Object是使用String來當作 Key 值_obj['key'] = "String1";
_obj['key2'] = "String2";
(或寫成_obj.key2 = "String2";)
當
_obj['key2'] = "String3";
本來的值也會被取
trace(_obj['key2']) //得到 String3
Dictionary
是把'物件', 當作索引值,
每個物件都是獨立單一的, 這樣就可以確保索引值是唯一的。
var _dic :Dictionary = new Dictionary();
var _mc:MovieClip = new MovieClip();
var _mc2:MovieClip = new MovieClip();
//建立二個MovieClip
_dic[_mc] = "Dictionary Value1";
_dic[_mc2] = "Dictionary Value2";
用for in 掃一下內容。
for (var d:* in _dic) {
trace(d, _dic[d])
}
// [object MovieClip] Dictionary Value1
// [object MovieClip] Dictionary Value2
就可以得到當初寫入的值了
記得, 不要時一定要delete掉, 否則物件的指派還在
就不會被記憶體回被器回收喔。
資料來源
簡單來說跟 Object 和 Array 是做一樣的事。
是用來索引物件用的類別。
Array是用數字來當做 Key 值。_array[0] = "字串1";
_array[1] = "字串2";
當
_array[0] = "字串3";
時, 本來的值就會被取代掉
trace(_array[0]) //得到 字串3
Object是使用String來當作 Key 值_obj['key'] = "String1";
_obj['key2'] = "String2";
(或寫成_obj.key2 = "String2";)
當
_obj['key2'] = "String3";
本來的值也會被取
trace(_obj['key2']) //得到 String3
Dictionary
是把'物件', 當作索引值,
每個物件都是獨立單一的, 這樣就可以確保索引值是唯一的。
var _dic :Dictionary = new Dictionary();
var _mc:MovieClip = new MovieClip();
var _mc2:MovieClip = new MovieClip();
//建立二個MovieClip
_dic[_mc] = "Dictionary Value1";
_dic[_mc2] = "Dictionary Value2";
用for in 掃一下內容。
for (var d:* in _dic) {
trace(d, _dic[d])
}
// [object MovieClip] Dictionary Value1
// [object MovieClip] Dictionary Value2
就可以得到當初寫入的值了
記得, 不要時一定要delete掉, 否則物件的指派還在
就不會被記憶體回被器回收喔。
資料來源
2011年8月16日
[AS3.0] 用程式設定文字的粗體/斜體/底線/項目等符號
明明在原SWF的設計就是粗體
但在更換內容(text)後,就會被打回原型!弄了好久,終於搞懂
例如我有個倒數五秒的畫面,每過一秒裡頭的文字就-1
//以下為設定字體為粗體的寫法
import flash.text.TextFormat;
var tf:TextFormat = new TextFormat();
tf.bold = true;
test_mc.sec_txt.setTextFormat(tf);
test_mc.sec_txt.text = 5;//這個5顯示出來並非是粗體
..................
原來!順序很重要!當sec_txt在被更換內容後,就不是原來的它了
所以只要改成
test_mc.sec_txt.text = 5;
test_mc.sec_txt.setTextFormat(tf);
就醬~
其它的設定:
tf.bold = true;粗體
tf.italic = true;斜體
tf.underline = true;底線
tf.bullet = true;項目符號
加入超連結
tf.url = "http://dorothycode.blogspot.com/";
tf.target = "_brank";
tf.font = "Arial";字體
tf.size = 32;大小
tf.color = 0xFF0000;顏色
setTextFormat & new TextFormat
setTextFormat除了一般用法把"格式"代入外
還可以txt.setTextFormat(tf, 0, 10);
這意指txt內從0索引開始的10個字會使用此格式
new TextFormat()
當我們new一個格式資訊時,可以直接就給予設定
new TextFormat(字體, 大小, 顏色, 粗體, 斜體, 底線, URL, 目標, 對齊, 左邊界, 右邊界, 縮排, 行距)
例如我們依照上例想要設定粗體字時
var tf:TextFormat = new TextFormat(null, null, null, true);
至於設null的會使用系統的預設設定~好用捏!
但在更換內容(text)後,就會被打回原型!弄了好久,終於搞懂
例如我有個倒數五秒的畫面,每過一秒裡頭的文字就-1
//以下為設定字體為粗體的寫法
import flash.text.TextFormat;
var tf:TextFormat = new TextFormat();
tf.bold = true;
test_mc.sec_txt.setTextFormat(tf);
test_mc.sec_txt.text = 5;//這個5顯示出來並非是粗體
..................
原來!順序很重要!當sec_txt在被更換內容後,就不是原來的它了
所以只要改成
test_mc.sec_txt.text = 5;
test_mc.sec_txt.setTextFormat(tf);
就醬~
其它的設定:
tf.bold = true;粗體
tf.italic = true;斜體
tf.underline = true;底線
tf.bullet = true;項目符號
加入超連結
tf.url = "http://dorothycode.blogspot.com/";
tf.target = "_brank";
tf.font = "Arial";字體
tf.size = 32;大小
tf.color = 0xFF0000;顏色
setTextFormat & new TextFormat
setTextFormat除了一般用法把"格式"代入外
還可以txt.setTextFormat(tf, 0, 10);
這意指txt內從0索引開始的10個字會使用此格式
new TextFormat()
當我們new一個格式資訊時,可以直接就給予設定
new TextFormat(字體, 大小, 顏色, 粗體, 斜體, 底線, URL, 目標, 對齊, 左邊界, 右邊界, 縮排, 行距)
例如我們依照上例想要設定粗體字時
var tf:TextFormat = new TextFormat(null, null, null, true);
至於設null的會使用系統的預設設定~好用捏!
2011年7月12日
[AS3.0]數值運算
四捨五入
Math.round(運算式)
無條件捨去
Math.floor(運算式)
無條件進位
Math.ceil(運算式)
絕對值
Math.abs(運算式)
取亂數
Math.random();
取最大數
Math.max(運算式1, 運算式2.....運算式N)
取最小數
Math.min(運算式1, 運算式2.....運算式N)
Math.round(運算式)
無條件捨去
Math.floor(運算式)
無條件進位
Math.ceil(運算式)
絕對值
Math.abs(運算式)
取亂數
Math.random();
取最大數
Math.max(運算式1, 運算式2.....運算式N)
取最小數
Math.min(運算式1, 運算式2.....運算式N)
[AS3.0]陣列的使用
陣列的宣告
var aArray:Array;
var bArray:Array = [123,"abc"];
以上兩種方法皆可,陣列中可以包函不同型態的值
陣列的長度
bArray.length
可以得到 2
陣列連結
var cArray:Array = ["def",5678];
concat傳回陣列
var dArray:Array = bArray.concat(cArray,aArray);
以上會將bArray,cArray,aArray的元素連結在一起後,回傳新的陣列
dArray 則等於 [123,"abc","def",5678]
join傳回字串
var dString:String = cArray.join(",");
以上會將cArray裡各元素轉成字串連結,join(分隔符號),亦可指定空字串join("")
分割陣列
slice(開始索引[,結束索引]) 傳回陣列
取出陣列一部份作為新陣列
0 1 2 3 4 5
|A |B |C |D |E |F | =>newArray
-5 -4 -3 -2 -1 0
newArray.slice(2,4) => ["C","D"]
newArray.slice(0,-3) => ["A","B","C"]
splice(開始索引[,刪除數量[,替換元素......N]]) 傳回陣列
追加陣列
push()
bArray.push(1688);
以上bArray則變成 [123,"abc",1688];
unshift()
bArray.unshift(1688);
以上bArray則變成[1688,123,"abc"];
刪除陣列
bArray = [123,"abc",1688];
pop()
bArray.pop();
以上bArray則變成[123,"abc"];
shift()
bArray.shift();
以上bArray則變成["abc",1688];
搜尋陣列元素
bArray = [123,"abc",1688];
indexOf(搜尋元素[,開始索引])
從前端開始搜尋
bArray.indexOf(123); => 0
bArray.indexOf("abc"); => 1
bArray.indexOf(1688); => 2
lastindexOf(搜尋元素[,開始索引])
從後端開始搜尋
var aArray:Array;
var bArray:Array = [123,"abc"];
以上兩種方法皆可,陣列中可以包函不同型態的值
陣列的長度
bArray.length
可以得到 2
陣列連結
var cArray:Array = ["def",5678];
concat傳回陣列
var dArray:Array = bArray.concat(cArray,aArray);
以上會將bArray,cArray,aArray的元素連結在一起後,回傳新的陣列
dArray 則等於 [123,"abc","def",5678]
join傳回字串
var dString:String = cArray.join(",");
以上會將cArray裡各元素轉成字串連結,join(分隔符號),亦可指定空字串join("")
分割陣列
slice(開始索引[,結束索引]) 傳回陣列
取出陣列一部份作為新陣列
0 1 2 3 4 5
|A |B |C |D |E |F | =>newArray
-5 -4 -3 -2 -1 0
newArray.slice(2,4) => ["C","D"]
newArray.slice(0,-3) => ["A","B","C"]
splice(開始索引[,刪除數量[,替換元素......N]]) 傳回陣列
追加陣列
push()
bArray.push(1688);
以上bArray則變成 [123,"abc",1688];
unshift()
bArray.unshift(1688);
以上bArray則變成[1688,123,"abc"];
刪除陣列
bArray = [123,"abc",1688];
pop()
bArray.pop();
以上bArray則變成[123,"abc"];
shift()
bArray.shift();
以上bArray則變成["abc",1688];
搜尋陣列元素
bArray = [123,"abc",1688];
indexOf(搜尋元素[,開始索引])
從前端開始搜尋
bArray.indexOf(123); => 0
bArray.indexOf("abc"); => 1
bArray.indexOf(1688); => 2
lastindexOf(搜尋元素[,開始索引])
從後端開始搜尋
bArray.lastindexOf(123); => 2
bArray.lastindexOf("abc"); => 1
bArray.lastindexOf(1688); => 0
對陣列的各元素執行含數
bArray = [123,"abc",1688];
bArray.foreach( testfunction);
function testfunction (元素的值:*,元素的索引:int, 指向陣列的參照:Array):void{
}
map則必須有傳回值
2011年6月9日
[AS3.0]載入外部......(檔案、圖片、資訊)
AS3.0已不支援loadMovie的語法,改採由Loader物件中的load()函數取而代之,透過load()可動態的載入外部的檔案,如:jpg、swf、gif..等,但當利用load()時還需透過影片物件將圖檔顯示出來,因此建立一個影片元件,並將實體名稱命名為 loadmc ,再透過此物件將外部的圖檔載入.....
var _ldr:Loader = new Loader();
var _file:String="minwt.jpg";
_ldr.load(new URLRequest(_file));
loadmc.addChild(_ldr);
應用範圍區分
Loader: swf,圖片(jpg,png,gif)
URLLoader:文本文件(xml,php,jsp…)
var _ldr:Loader = new Loader();
var _file:String="minwt.jpg";
_ldr.load(new URLRequest(_file));
loadmc.addChild(_ldr);
應用範圍區分
Loader: swf,圖片(jpg,png,gif)
URLLoader:文本文件(xml,php,jsp…)
2011年6月7日
[AS3.0]與JavaScript通訊
使用類別import flash.external.Externallnterface
要從AS執行JavaScript的方法時
可使用ExternalInterface.call("指定的方法","參數1",......)
要從JavaScript執行AS的方法時
須事先使用ExternalInterface.addCallback("指定從js呼叫時方法",AS方法)
要從AS執行JavaScript的方法時
可使用ExternalInterface.call("指定的方法","參數1",......)
要從JavaScript執行AS的方法時
須事先使用ExternalInterface.addCallback("指定從js呼叫時方法",AS方法)
2011年5月16日
[AS環境_下]Flash與AMFPHP的溝通_解決#2044: 未處理的 NetStatusEvent
首先,我們利用phpMyAdmin建立後端資料庫及資料表
create database testflash;
create table testing(
number varchar(20)
);
再來,我們要建立可已用的服務(PHP Class) Counter
create database testflash;
create table testing(
number varchar(20)
);
再來,我們要建立可已用的服務(PHP Class) Counter
2011年5月11日
[AS3.0]初體驗紀錄_基礎code
三個核心抽象類別(Abstract Class)
1.DisplayObject(顯示)
2.InteractiveObject(顯示+互動)
3.DisplayObjectContainer(顯示+互動+容器)
所有的顯示物件都繼承1類別,屬性有x,y,width,height.....等
2類別繼承自1外,還增加了滑鼠和鍵盤的互動。實體子類別TextField & SimpleButton
3類別具有1和2的功能外,還有當容器的角色,這部份有Stage,Sprite,Loader,MovieClip
Stage舞台
Sprite容器(沒有時間軸)
Loader載入外部資源
MovieClip容器(有時間軸的動畫)
動態加入刪除物件
numChildren
容器.numChildren屬性用來找到它所有的子物件量
getChildAt
容器.getChildAt(int)方法用來得到子物件指標(類別)
addChild / removeChild
容器.addChild(物件) 將物件放到時間軸的顯示中
addChildAt / removeChildAt
容器.addChildAt(物件,深度) 將物件放到時間軸的顯示中,並給予深度
※深度:0最底層;n最上層
swapChildren / swapChildrenAt
容器.swapChildren(物件A,物件B) 將兩物件互換
容器.swapChildrenAt(深度A,深度B) 將不同深度兩物互換
getChildIndex / setChildIndex
容器.getChildIndex(物件) 取得物件深度
容器.setChildIndex(物件,深度) 設定物件深度
//2011.8.26加註 使用方式 例如view.testMC 要在整個view下放到最上層
view.setChildIndex(view.testMC , view.numChildren);
getChildByName
容器.getChildByName(name:String)用物件名稱取得此子物件指標(類別)
1.DisplayObject(顯示)
2.InteractiveObject(顯示+互動)
3.DisplayObjectContainer(顯示+互動+容器)
所有的顯示物件都繼承1類別,屬性有x,y,width,height.....等
2類別繼承自1外,還增加了滑鼠和鍵盤的互動。實體子類別TextField & SimpleButton
3類別具有1和2的功能外,還有當容器的角色,這部份有Stage,Sprite,Loader,MovieClip
Stage舞台
Sprite容器(沒有時間軸)
Loader載入外部資源
MovieClip容器(有時間軸的動畫)
動態加入刪除物件
numChildren
容器.numChildren屬性用來找到它所有的子物件量
getChildAt
容器.getChildAt(int)方法用來得到子物件指標(類別)
addChild / removeChild
容器.addChild(物件) 將物件放到時間軸的顯示中
addChildAt / removeChildAt
容器.addChildAt(物件,深度) 將物件放到時間軸的顯示中,並給予深度
※深度:0最底層;n最上層
swapChildren / swapChildrenAt
容器.swapChildren(物件A,物件B) 將兩物件互換
容器.swapChildrenAt(深度A,深度B) 將不同深度兩物互換
getChildIndex / setChildIndex
容器.getChildIndex(物件) 取得物件深度
容器.setChildIndex(物件,深度) 設定物件深度
//2011.8.26加註 使用方式 例如view.testMC 要在整個view下放到最上層
view.setChildIndex(view.testMC , view.numChildren);
getChildByName
容器.getChildByName(name:String)用物件名稱取得此子物件指標(類別)
2011年5月5日
[AS3.0]初體驗紀錄_雜(百寶箱)
物件name.addEventListener(Event.ENTER_FRAME, function_name);
functoin function_name(event:Event):void {
..............
}
function 函數名(參數1:資料型態,參數2:資料行態,.....):傳回值資料型態{ }
若沒有指定傳回值則為void
====================================================================
EventListerner事件監聽器;接收事件時addEventListener();刪除時removeEventListerner();
my_mc.addEventListener(MouseEvent.ROLL_OVER, mouseStateHandler);
my_mc.addEventListener(MouseEvent.ROLL_OUT, mouseStateHandler);
my_mc.addEventListener(MouseEvent.CLICK, clickHandler);
function mouseStateHandler(event:MouseEvent):void {
switch (event.type) {
case MouseEvent.ROLL_OVER :
output_txt.text = "ROLL_OVER!";
break;
case MouseEvent.ROLL_OUT :
output_txt.text = "ROLL_OUT!";
break;
}
}
function clickHandler(event:MouseEvent):void {
output_txt.text = "";
my_mc.removeEventListener(MouseEvent.ROLL_OVER, mouseStateHandler);
my_mc.removeEventListener(MouseEvent.ROLL_OUT, mouseStateHandler);
my_mc.removeEventListener(MouseEvent.CLICK, clickHandler);
}
==================================================================
檢查事件監聽器是否已登錄
mc.hasEventListener(Event.ENTER_FRAME)
檢查事件目標(其實就是物件)
event.target (指物件裡的零件)
event.currentTarget (指物件)
該屬性有x,y,width,height,name........
==================================================================
Flash Player動態/非動態
指的是是否焦點在此視窗上
(運用上像Funtown的牌桌,一離開視窗就會沒音樂,但一點選又繼續播放)
my_mc.addEventListerner(event.ACTIVATE, function_name1);
my_mc.addEventListerner(event.DEACTIVATE, function_name2);
主要就是如果現在player是在焦點上就會做function_name1的事;不是就會function_name2
==================================================================
透明度&顯不顯示
mcStar.alpha = 1 (全亮) ~ 0 (透明);
mcStar.visible = true ; false;
要提取成文字時String(mcStar.alpha);, String(mcStar.visible);
==================================================================
/* 阿斗自習 */
三個物件: inText,outText,myBtn
var newURL:String = "http://www.yahoo.com.tw";
myBtn.addEventListener(MouseEvent.CLICK, gotheURL);
function gotheURL(event:MouseEvent):void{
var adobeURL:URLRequest = new URLRequest(newURL);
navigateToURL(adobeURL);
}
inText.addEventListener(TextEvent.TEXT_INPUT, changeURL);
function changeURL(item:TextEvent):void{
if(item.text == ";"){
newURL = "http://";
} else {
newURL += item.text;
}
outText.text = "New URL:" + newURL;
}
自行輸入想要的URL,按下Btn就會連結!!
==================================================================
functoin function_name(event:Event):void {
..............
}
function 函數名(參數1:資料型態,參數2:資料行態,.....):傳回值資料型態{ }
若沒有指定傳回值則為void
====================================================================
EventListerner事件監聽器;接收事件時addEventListener();刪除時removeEventListerner();
my_mc.addEventListener(MouseEvent.ROLL_OVER, mouseStateHandler);
my_mc.addEventListener(MouseEvent.ROLL_OUT, mouseStateHandler);
my_mc.addEventListener(MouseEvent.CLICK, clickHandler);
function mouseStateHandler(event:MouseEvent):void {
switch (event.type) {
case MouseEvent.ROLL_OVER :
output_txt.text = "ROLL_OVER!";
break;
case MouseEvent.ROLL_OUT :
output_txt.text = "ROLL_OUT!";
break;
}
}
function clickHandler(event:MouseEvent):void {
output_txt.text = "";
my_mc.removeEventListener(MouseEvent.ROLL_OVER, mouseStateHandler);
my_mc.removeEventListener(MouseEvent.ROLL_OUT, mouseStateHandler);
my_mc.removeEventListener(MouseEvent.CLICK, clickHandler);
}
==================================================================
檢查事件監聽器是否已登錄
mc.hasEventListener(Event.ENTER_FRAME)
檢查事件目標(其實就是物件)
event.target (指物件裡的零件)
event.currentTarget (指物件)
該屬性有x,y,width,height,name........
==================================================================
Flash Player動態/非動態
指的是是否焦點在此視窗上
(運用上像Funtown的牌桌,一離開視窗就會沒音樂,但一點選又繼續播放)
my_mc.addEventListerner(event.ACTIVATE, function_name1);
my_mc.addEventListerner(event.DEACTIVATE, function_name2);
主要就是如果現在player是在焦點上就會做function_name1的事;不是就會function_name2
==================================================================
透明度&顯不顯示
mcStar.alpha = 1 (全亮) ~ 0 (透明);
mcStar.visible = true ; false;
要提取成文字時String(mcStar.alpha);, String(mcStar.visible);
==================================================================
/* 阿斗自習 */
三個物件: inText,outText,myBtn
var newURL:String = "http://www.yahoo.com.tw";
myBtn.addEventListener(MouseEvent.CLICK, gotheURL);
function gotheURL(event:MouseEvent):void{
var adobeURL:URLRequest = new URLRequest(newURL);
navigateToURL(adobeURL);
}
inText.addEventListener(TextEvent.TEXT_INPUT, changeURL);
function changeURL(item:TextEvent):void{
if(item.text == ";"){
newURL = "http://";
} else {
newURL += item.text;
}
outText.text = "New URL:" + newURL;
}
自行輸入想要的URL,按下Btn就會連結!!
==================================================================
[AS3.0]初體驗紀錄_如何匯入import as檔?
雖然這問題很基礎,但一開始還真是不知如何做起
網友大部份都直接說寫成另一個as檔
但我資質欠佳還是不懂是怎麼運作
通常會Flash的朋友都會一點AS,就是在影格裡加上action
影格上會出現個a的標示,直接在fla匯出swf就ok了~
但如何把swf和as兩者分開呢?因為這樣對程式開發者而言比較好維護,不用老是要打開fla來修
有位網友他把import as寫的很清楚
1.先有一個ShapeExample.as
2.在Flash的as裡(即fla檔中影格上的a)寫上
import ShapeExample;
var shape:ShapeExample = new ShapeExample;
addChild(shape);
在此,我測試了好幾遍都不行,原因可能是上面用法是AS2
於是用以下寫法就ok了
include "ShapeExample.as";
##### 2011.5.6 #####
AS中使用MovieClip類別,如何匯入MovieClip?
import flash.display.MovieClip;
import flash.display.*;
##### 2011.5.16 #####
了解網友為什麼會這樣寫了
import ShapeExample;
var shape:ShapeExample = new ShapeExample;
addChild(shape);
ShapeExample指的是已經包裝好的package
package{
public class ShapeExample {
...........
}
}
所以才會用import!!
詳請看[AS3.0]初體驗紀錄_基礎code
網友大部份都直接說寫成另一個as檔
但我資質欠佳還是不懂是怎麼運作
通常會Flash的朋友都會一點AS,就是在影格裡加上action
影格上會出現個a的標示,直接在fla匯出swf就ok了~
但如何把swf和as兩者分開呢?因為這樣對程式開發者而言比較好維護,不用老是要打開fla來修
有位網友他把import as寫的很清楚
1.先有一個ShapeExample.as
2.在Flash的as裡(即fla檔中影格上的a)寫上
import ShapeExample;
var shape:ShapeExample = new ShapeExample;
addChild(shape);
在此,我測試了好幾遍都不行,原因可能是上面用法是AS2
於是用以下寫法就ok了
include "ShapeExample.as";
##### 2011.5.6 #####
AS中使用MovieClip類別,如何匯入MovieClip?
import flash.display.MovieClip;
import flash.display.*;
##### 2011.5.16 #####
了解網友為什麼會這樣寫了
import ShapeExample;
var shape:ShapeExample = new ShapeExample;
addChild(shape);
ShapeExample指的是已經包裝好的package
package{
public class ShapeExample {
...........
}
}
所以才會用import!!
詳請看[AS3.0]初體驗紀錄_基礎code
2011年4月2日
[HTML] Mobile META Tags指定畫面解析度
手機螢幕總是大大小小規格不一
在IE上呈現的畫面到了smart手機上..............畫面實在小不拉機
這時只要在META多這行
<meta name="viewport" content="width={$ScreenWidth}" />
即可依照你$ScreenWidth的大小而有多大的畫面寬度
在IE上呈現的畫面到了smart手機上..............畫面實在小不拉機
這時只要在META多這行
<meta name="viewport" content="width={$ScreenWidth}" />
即可依照你$ScreenWidth的大小而有多大的畫面寬度
2011年4月1日
[PHP] SQL injection 資料隱碼攻擊
資料隱碼:
$value = $_get['f_value'];
$sql = "select * from a where f='$value'";
echo $sql;
大部份的programmer會把user輸入的參數照單全收的放進$value
hacker利用這特點,不會依照一般user輸入值
他可以將f_value的內容輸入為
' or '1' = '1
按照以上他給的值帶進最上面的語法中你會發現
$sql = "select * from a where f='' or '1' = '1'";
於是,整個a的資料都洩露光光了
這種資料隱碼的攻擊運用還有很多
在MSSQL裡,若是DB權限沒有管制而開至dbowner
它可以埋code下 'exec master ..xp_cmdshell 'net user test testpass/ADD'--
如此一來他現在有一個test的使用者和testpass的密碼..........................
解決的辦法:
php.ini裡有一個magic_quotes_gpc,若是值訂為OFF,則PHP就不會在敏感的字元前加上反斜線(\)
因為user輸入的值可能帶有敏感字元如單引號,如此就會導致SQL injection漏洞
在此可以用addslashes()函數來解決,它會自動在敏感字元前加反斜線
但是昨為一個開發者,不會知道環境變數是off還是on
get_magic_quotes_gpc()可以了解此狀況,因此產生以下function
function quotes($content){
if(!get_magic_quotes_gpc()){
if(is_array($content)){ //檢查是否為陣列,若是的話用foreach全部解決
foreach($content as $key => $value){
$content[$key] = addslashes($value);
}
}else{
addslashes($content);
}
}else{
//magic_quotes_gpc=on,不處理
}
return $content;
}
回到我們一開始的code,就可以寫成
$value = $_get['f_value'];
$sql = "select * from a where f='$value'";
echo $sql;
大部份的programmer會把user輸入的參數照單全收的放進$value
hacker利用這特點,不會依照一般user輸入值
他可以將f_value的內容輸入為
' or '1' = '1
按照以上他給的值帶進最上面的語法中你會發現
$sql = "select * from a where f='' or '1' = '1'";
於是,整個a的資料都洩露光光了
這種資料隱碼的攻擊運用還有很多
在MSSQL裡,若是DB權限沒有管制而開至dbowner
它可以埋code下 'exec master ..xp_cmdshell 'net user test testpass/ADD'--
如此一來他現在有一個test的使用者和testpass的密碼..........................
解決的辦法:
php.ini裡有一個magic_quotes_gpc,若是值訂為OFF,則PHP就不會在敏感的字元前加上反斜線(\)
因為user輸入的值可能帶有敏感字元如單引號,如此就會導致SQL injection漏洞
在此可以用addslashes()函數來解決,它會自動在敏感字元前加反斜線
但是昨為一個開發者,不會知道環境變數是off還是on
get_magic_quotes_gpc()可以了解此狀況,因此產生以下function
function quotes($content){
if(!get_magic_quotes_gpc()){
if(is_array($content)){ //檢查是否為陣列,若是的話用foreach全部解決
foreach($content as $key => $value){
$content[$key] = addslashes($value);
}
}else{
addslashes($content);
}
}else{
//magic_quotes_gpc=on,不處理
}
return $content;
}
回到我們一開始的code,就可以寫成
$value = quotes($_get['f_value']);
$sql = "select * from a where f='$value'";
echo $sql;
2011年3月24日
[JavaScript]window.location.href和window.location.replace的區別
有3個jsp頁面(1.jsp, 2.jsp, 3.jsp),進系統默認的是1.jsp ,當我進入2.jsp的時候, 2.jsp裡面用window.location.replace("3.jsp");與用window.location.href("3.jsp");從用戶界面來看是沒有什麼區別的,但是當3.jsp頁面有一個「返回」按鈕,調用window.history.go(-1);wondow.history.back();方法的時候,一點這個返回按鈕就要返回2.jsp頁面的話,區別就出來了。
例子:1.html (放form,給user填資料,送出到2.jsp) ; 2.jsp (get user填的資料並處理完後,網頁轉向3.jsp) ; 3.jsp (剛剛2.jsp轉向的動作不同影響按"上一頁"的不一樣)
若是2.jsp 用window.location.replace("3.jsp") 那麼在3.jsp上按上一頁會變成1.jsp
若是2.jsp 用window.location.href("3.jsp") 那麼在3.jsp上按上一頁會變成2.jsp (沒錯~它又會再處理一次並且轉向3.jsp)
上一頁亦可用window.history.go(-1) ; window.history.back();
例子:1.html (放form,給user填資料,送出到2.jsp) ; 2.jsp (get user填的資料並處理完後,網頁轉向3.jsp) ; 3.jsp (剛剛2.jsp轉向的動作不同影響按"上一頁"的不一樣)
若是2.jsp 用window.location.replace("3.jsp") 那麼在3.jsp上按上一頁會變成1.jsp
若是2.jsp 用window.location.href("3.jsp") 那麼在3.jsp上按上一頁會變成2.jsp (沒錯~它又會再處理一次並且轉向3.jsp)
上一頁亦可用window.history.go(-1) ; window.history.back();
2011年2月23日
[PHP] big5轉utf-8被吃字的問題(mb_convert_encoding)
文字轉碼都習慣用iconv(),終於解決掉「許蓋功」問題卻又發現會吃掉字
例如宏碁的碁,雖然也找到方式//TRANSLIT//IGNORE去處理,但終究沒有正確顯示「碁」
使用者可不會這樣放過你
php有提供一個方法叫mbstring
首先必須在php.ini
將 extension=php_mbstring.dll打開,並重開apache
接下來轉碼的方式
mb_convert_encoding(要被轉的字串,'目標碼','原來編碼');
相關Blogger: [PHP]iconv轉碼發生被截字的問題
例如宏碁的碁,雖然也找到方式//TRANSLIT//IGNORE去處理,但終究沒有正確顯示「碁」
使用者可不會這樣放過你
php有提供一個方法叫mbstring
首先必須在php.ini
將 extension=php_mbstring.dll打開,並重開apache
接下來轉碼的方式
mb_convert_encoding(要被轉的字串,'目標碼','原來編碼');
相關Blogger: [PHP]iconv轉碼發生被截字的問題
[PHP][Smarty] 安裝smartySOP
1.下載smarty檔,解開並放在php include夾下
2.Smarty-3.x.x資料夾下可看見
demo資料夾------->將此夾放在預設網站下
libs資料夾------->將裡面內容放在include/class/Smarty/,其中有兩個資料夾及Smarty.class.php就是smarty引擎
3.demo/config.php
2.Smarty-3.x.x資料夾下可看見
demo資料夾------->將此夾放在預設網站下
libs資料夾------->將裡面內容放在include/class/Smarty/,其中有兩個資料夾及Smarty.class.php就是smarty引擎
3.demo/config.php
<?php include "class/Smarty/Smarty.class.php"; define('__SITE_ROOT','D:/PHPWeb/demo');// 最後沒有斜線 $tpl = new Smarty(); $tpl->template_dir = __SITE_ROOT . "/templates/"; $tpl->compile_dir = __SITE_ROOT . "/templates_c/"; $tpl->config_dir = __SITE_ROOT . "/configs/"; $tpl->cache_dir = __SITE_ROOT . "/cache/"; $tpl->left_delimiter = '<{'; $tpl->right_delimiter = '}>'; ?> |
4.demo/templates/test.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=big5"> <title><{$title}></title> </head> <body> <{$content}> </body> </html> |
5.demo/index.php
<?php require "config.php"; $tpl->assign("title", "測試用的網頁標題"); $tpl->assign("content", "測試用的網頁內容"); $tpl->display('test.html'); ?> |
6.IE 查看127.0.0.1/demo/index.php 若網頁出現「測試用的網頁內容」則表示成功
【註】
紅色標示:表示需要記得修改的內容
藍色標示:Smarty架構的重點!
====================================================
有趣的smarty,安裝只要copy需要的資料夾即可馬上使用!
設計各式樣本在templates下,只要每頁都有{$content}, {$title}
就可由index.php裡去控制要顯示那一種樣本(html)
另外
也能從index.php去控制每次秀的內容不同
例 if(早上) { $tpl->assign("content", "早安"); } else { $tpl->assign("content", "晚安"); } 之類運用
2011年1月9日
[PHP] php.ini中文解說版
今天安裝IIS+mysql+php 花了我四個小時(真的太久沒碰了啦~)
專案一點進展都沒有
都是因為free server的後端連不上, 真是悶透我了~
以下這篇ini還真是實用!!
專案一點進展都沒有
都是因為free server的後端連不上, 真是悶透我了~
以下這篇ini還真是實用!!
訂閱:
文章 (Atom)