Markdown

[PHP] Variable

變數的轉型

<?php $number = 12345 * 67890; echo substr($number, 3, 1); ?>
這段的結果是1

<?php $number = "12345 * 67890"; echo substr($number, 3, 1); ?>
這段的結果是4,因為把它當成字串來擷取 第四個元素就是4

常數

兩件事:
常數前面不用加$
只能用define來定義
通常使用大寫來定義
drfine("ROOT_LOCATION", "/usr/local/www/"); $directory = ROOT_LOCATION;
奇奇怪怪的常數:
_LINE_ _FILE_ _DIR_ _FUNCTION_ _CLASS_ _METHOD_ _NAMESPACE_ //example: ehco "this is line " . _LINE_ . " of file " . _FILE_;

FUNCTION

<?php function longdate($timestamp) { return date("l F jS Y", $timestamp); } echo longdate(time()); ?>
變數範圍:
如果只想要變數只在函式內作用的話,
可以使用 $temp 。
區域變數:
來比較一下結果
<?php function longdate($timestamp) { $temp = date("l F jS Y", $timestamp); return "the date is $date"; } ?>
<?php $temp = "the date is "; echo longdate(time()); function longdate($timestamp) { return $temp . date("l F jS Y", $timestamp); } ?>
第一種當呼叫完之後,變數就在回傳完清除。
第二種longdate無法存取,因為 $temp 不宣告在裡面。
怎麼解決第二種的問題呢?一種是傳遞出來一種是傳遞進去。
<?php $temp = "the date is "; echo $temp . longdate(time()); function longdate($timestamp) { return date("l F jS Y", $timestamp); } ?>
<?php $temp = "the date is "; echo longdate($temp, time()); function longdate($text, $timestamp) { return $text . date("l F jS Y", $timestamp); } ?>
global variable:
global $is_logged_in;
recommend using capital letters
global $IS_LOGGED_IN;
static variable:
<?php function test() { static $count = 0; echo $count; $count++; } ?>
leagal declare & illegal declare:
宣告靜態變數時只能指定初始值,並不能用算式去賦值。
<?php static $int = 0; //leagal static $int = 1+2; //illegal (Parse error) static $int = sqrt(144); //illegal ?>

Predefined Variables

Superglobals — Superglobals are built-in variables that are always available in all scopes
$GLOBALS — References all variables available in global scope
$_SERVER — Server and execution environment information
$_GET — HTTP GET variables
$_POST — HTTP POST variables
$_FILES — HTTP File Upload variables
$_REQUEST — HTTP Request variables
$_SESSION — Session variables
$_ENV — Environment variables
$_COOKIE — HTTP Cookies
$php_errormsg — The previous error message
$HTTP_RAW_POST_DATA — Raw POST data
$http_response_header — HTTP response headers
$argc — The number of arguments passed to script
$argv — Array of arguments passed to script
超級全域變數的安全性:
$came_from = $_SERVER['HTTP_REFERER'];
為了安全,使用這類變數之前最好使用PHP提供的htmlentities(),他會將所有的字元轉換成html實體,例如>,< 轉換成&lt,&gt 字串。
因此較佳的$_SERVER存取方式為:
$came_from = htmlentities($_SERVER['HTTP_REFERER']);

除了超全域變數之外,任何需要經過處理來輸出使用者或第三方資料都要使用htmlentities來處理!

留言