導航:首頁 > 編程語言 > phpvalid

phpvalid

發布時間:2023-03-29 15:52:25

php資料庫連接問題

哦,這個函數第一個參數是hostname,是主機地念耐址,不是資料庫名字。比如mysql_connect('localhost', 'roo', ''吵祥),連接成功升高搏之後再指定資料庫,好像是mysql_select_db('xenforo');

呵呵,太久沒用這個系列的函數了,大致意思是這樣。

Ⅱ 請詳細說明一下php5中的魔術方法

PHP處理對象部分的內核完全重新開發過,提供更多功能的同時也提高了性能。在以前版本的php中,處理對象和處理基本類型(數字,字元串)的方式是一樣的。這種方式的缺陷是:當將對象賦值給一個變數時,或者通過參數傳遞對象時,對象將被完全拷貝一份。在新的版本里,上述操作將傳遞引用(可以把引用理解成對象的標識符),而非值。
很多PHP程序員可能甚至沒有察覺到老的對象處理方式。事實上,大多數的php應用都可以很好地運行。或者僅僅需要很少的改動。
私有和受保護成員
PHP5引入了私有和受保護成員變數的概念。我們可以用它來定義類成員的可見性。
例子
受保護成員可以被子類訪問, 而私有成員只能被類本身訪問。

代碼:--------------------------------------------------------------------------------

<?php
class MyClass {
private $Hello = "Hello, World!\n";
protected $Bar = "Hello, Foo!\n";
protected $Foo = "Hello, Bar!\n";

function printHello() {
print "MyClass::printHello() " . $this->Hello;
print "MyClass::printHello() " . $this->Bar;
print "MyClass::printHello() " . $this->Foo;
}
}

class MyClass2 extends MyClass {
protected $Foo;

function printHello() {
MyClass::printHello(); /* Should print */
print "MyClass2::printHello() " . $this->Hello; /* Shouldn't print out anything */
print "MyClass2::printHello() " . $this->Bar; /* Shouldn't print (not declared)*/
print "MyClass2::printHello() " . $this->Foo; /* Should print */
}
}

$obj = new MyClass();
print $obj->Hello; /* Shouldn't print out anything */
print $obj->Bar; /* Shouldn't print out anything */
print $obj->Foo; /* Shouldn't print out anything */
$obj->printHello(); /* Should print */

$obj = new MyClass2();
print $obj->Hello; /* Shouldn't print out anything */
print $obj->Bar; /* Shouldn't print out anything */
print $obj->Foo; /* Shouldn't print out anything */
$obj->printHello();
?>
--------------------------------------------------------------------------------

私有方法和受保護方法
PHP5也引入了私有方法和受保護方法的概念。
例子:

代碼:--------------------------------------------------------------------------------

<?php
class Foo {
private function aPrivateMethod() {
echo "Foo::aPrivateMethod() called.\n";
}

protected function aProtectedMethod() {
echo "Foo::aProtectedMethod() called.\n";
$this->aPrivateMethod();
}
}

class Bar extends Foo {
public function aPublicMethod() {
echo "Bar::aPublicMethod() called.\n";
$this->aProtectedMethod();
}
}

$o = new Bar;
$o->aPublicMethod();
?>
--------------------------------------------------------------------------------

以前的不使用類的老代碼,沒有訪問修飾符(public, protected, private)的代碼可以不經改動運行。
抽象類和抽象方法
Php5也引入了抽象類和抽象方法的概念。抽象方法只是聲明了方法的簽名並不提供它的實現。包含抽象方法的類必須被聲明成抽象類。
例子:

代碼:--------------------------------------------------------------------------------

<?php
abstract class AbstractClass {
abstract public function test();
}

class ImplementedClass extends AbstractClass {
public function test() {
echo "ImplementedClass::test() called.\n";
}
}

$o = new ImplementedClass;
$o->test();
?>
--------------------------------------------------------------------------------

抽象類不能被實例化。以前的不使用抽象類的老代碼可以不經改動運行。
介面
Php5引入了介面。一個類可以實現多個介面。
例子:

代碼:--------------------------------------------------------------------------------

<?php
interface Throwable {
public function getMessage();
}

class MyException implements Throwable {
public function getMessage() {
// ...
}
}
?>
--------------------------------------------------------------------------------

以前的不使用介面的老代碼可以不經改動運行

類的型別提示
PHP5依然是弱類型的,不過在定義函數參數時,可以使用類的型別提示來聲明期望傳入的對象類型
Example

代碼:--------------------------------------------------------------------------------

<?php
interface Foo {
function a(Foo $foo);
}

interface Bar {
function b(Bar $bar);
}

class FooBar implements Foo, Bar {
function a(Foo $foo) {
// ...
}

function b(Bar $bar) {
// ...
}
}

$a = new FooBar;
$b = new FooBar;

$a->a($b);
$a->b($b);
?>
--------------------------------------------------------------------------------

和其他強類型語言一樣,php5類的型別提示在運行期間檢查而非編譯期間檢查。即:

代碼:--------------------------------------------------------------------------------

<?php
function foo(ClassName $object) {
// ...
}
?>
和下面的代碼是一樣的:
<?php
function foo($object) {
if (!($object instanceof ClassName)) {
die("Argument 1 must be an instance of ClassName");
}
}
?>
--------------------------------------------------------------------------------

這個語法只適用於類,不適用於內建類型。
Final

PHP 5 引入了final關鍵字來聲明final成員和final方法。final成員和final方法不能被子類覆蓋。
Example

代碼:--------------------------------------------------------------------------------

<?php
class Foo {
final function bar() {
// ...
}
}
?>
--------------------------------------------------------------------------------

更進一步,可以把類聲明成final。將類聲明成final可以阻止這個類被繼承。final類裡面的方法預設地都是final的,無需再聲明一次。
Example

代碼:--------------------------------------------------------------------------------

<?php
final class Foo {
// class definition
}

// the next line is impossible
// class Bork extends Foo {}
?>
--------------------------------------------------------------------------------

屬性不能定義成為final.
以前的不使用final的老代碼可以不經改動運行.
對象克隆
Php4沒有提供一種機制來讓用戶自己定義復制構造子( constructor)控制對象的復制過程。Php4做二進制的拷貝,因而很精確地復制了對象的所有屬性。
精確地復制對象的所有屬性可能並不是我們一直想要的。有個例子可以很好地說明我們確實需要復制構造子:比如一個GTK Window的對象 a。 a持有它所需要的全部資源。當復制的這個GTK Window到對象b時候,我們更希望b持有新的資源對象。再舉個例子:對象a包含了一個對象c, 當你把對象a 復制到對象c的時候。我們可能更希望對象b包含一個新的對象c的, 而不是一個對象c的引用。(譯者註:這里所說的就是淺克隆和深克隆。)
對象的復制是通過clone這個關鍵字達到的(Clone調用被克隆對象的__clone()方法)。對象的__clone方法不能夠直接被調用。

代碼:--------------------------------------------------------------------------------

<?php
$_of_object = clone $object;
?>
--------------------------------------------------------------------------------

當developer創建對象的一份拷貝的時候,php5將會檢查 __clone()方法是否存在。如果不存在,那麼它就會呼叫預設的__clone()方法,復制對象的所有屬性。如果__clone()方法已經定義過,那麼_clone()方法就會負責設置新對象的屬性。為了方便起見,Engine會預設地復制所有的屬性。所以在__clone()方法中,只需要覆蓋那些需要更改的屬性就可以了。如下:
Example

代碼:--------------------------------------------------------------------------------

<?php
class MyCloneable {
static $id = 0;

function MyCloneable() {
$this->id = self::$id++;
}

function __clone() {
$this->address = "New York";
$this->id = self::$id++;
}
}

$obj = new MyCloneable();

$obj->name = "Hello";
$obj->address = "Tel-Aviv";

print $obj->id . "\n";

$obj_cloned = clone $obj;

print $obj_cloned->id . "\n";
print $obj_cloned->name . "\n";
print $obj_cloned->address . "\n";
?>
--------------------------------------------------------------------------------

統一構造函數
Php5允許開發者聲明一個類的構造方法。擁有構造方法的類在每次創建新的對象的時候都會呼叫這個方法,因此構造方法適合對象在被使用之前的初始化工作
Php4中,構造方法的名稱和類的名稱一樣。考慮到從子類構造方法呼叫父類構造方法的情況是非常普遍的,而將類從一個繼承體系中搬遷引起的父類變更就常常導致需要更改類的構造方法,php4的做法顯然是不太合理的。
Php5引入了一個聲明構建函數的標准方法: __construct().如下:
Example

代碼:--------------------------------------------------------------------------------

<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}

class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}

$obj = new BaseClass();
$obj = new SubClass();
?>
--------------------------------------------------------------------------------

為保持向後的兼容性,如果php5不能夠找到 __construct(),它會尋找老式的構造方法,即與類同名的方法。簡單的說,只有當老代碼里包含了一個__construct()方法的時候,才存在一個兼容性的問題。
析構方法
對於面向對象的編程來說,可以定義析構方法是非常有用的一個功能。析構方法可以用來記錄調試信息,關閉資料庫連接等等一些清除收尾的工作。Php4中沒有析構方法,盡管php4已經支持可以注冊一個函數以便請求結束的時候被調用。
Php5引進的析構方法的概念和其他面向對象的語言(比如java)是一致的。當指向這個對象的最後一個引用被銷毀的時候,析構方法被調用,調用完成後釋放內存。注意:析構方法不接受任何參數。
Example

代碼:--------------------------------------------------------------------------------

<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}

function __destruct() {
print "Destroying " . $this->name . "\n";
}
}

$obj = new MyDestructableClass();
?>
--------------------------------------------------------------------------------

和構建方法一樣,父類的析構方法也不會被隱含調用。子類可以在自己的析構方法通過調用parent::__destruct()來顯式地調用它。
Constants
Php5引入了class級別的常量。

代碼:--------------------------------------------------------------------------------

<?php
class Foo {
const constant = "constant";
}

echo "Foo::constant = " . Foo::constant . "\n";
?>
--------------------------------------------------------------------------------

老的沒有使用const的代碼仍然正常運行。
Exceptions
Php4沒有異常控制。Php5引入了和其它語言(java)相似的異常控制模式。應該注意的是php5裡面支持捕捉全部異常,但是不支持finally子句。
在catch語句塊裡面,可以重新拋出異常。也可以有多個catch語句,在這種情況下,被捕捉到的異常從上往下依次比較和catch語句比較異常,第一個類型匹配的catch語句將會被執行。如果一直搜索到底還沒有發現匹配的catch子句,則尋找下一個try/catch語句。最後不能捕捉的異常將被顯示出來。如果異常被捕捉,那麼程序會接著catch語句塊的下面開始執行。
Example

代碼:--------------------------------------------------------------------------------

<?php
class MyException {
function __construct($exception) {
$this->exception = $exception;
}

function Display() {
print "MyException: $this->exception\n";
}
}

class MyExceptionFoo extends MyException {
function __construct($exception) {
$this->exception = $exception;
}

function Display() {
print "MyException: $this->exception\n";
}
}

try {
throw new MyExceptionFoo('Hello');
}
catch (MyException $exception) {
$exception->Display();
}
catch (Exception $exception) {
echo $exception;
}
?>
--------------------------------------------------------------------------------

上面的例子表明可以定義一個並不繼承自 Exception的異常類,但是,最好還是從Exception繼承並定義自己的異常。這是因為系統內建的Exception類能夠收集到很多有用的信息, 而不繼承它的異常類是得不到這些信息的。下面的php代碼模仿了系統內建Exception類。每個屬性後面都加了注釋。每個屬性都有一個getter,由於這些getter方法經常被系統內部處理調用,所以這些方法被標明了final。
Example

代碼:--------------------------------------------------------------------------------

<?php
class Exception {
function __construct(string $message=NULL, int code=0) {
if (func_num_args()) {
$this->message = $message;
}
$this->code = $code;
$this->file = __FILE__; // of throw clause
$this->line = __LINE__; // of throw clause
$this->trace = debug_backtrace();
$this->string = StringFormat($this);
}

protected $message = 'Unknown exception'; // exception message
protected $code = 0; // user defined exception code
protected $file; // source filename of exception
protected $line; // source line of exception

private $trace; // backtrace of exception
private $string; // internal only!!

final function getMessage() {
return $this->message;
}
final function getCode() {
return $this->code;
}
final function getFile() {
return $this->file;
}
final function getTrace() {
return $this->trace;
}
final function getTraceAsString() {
return self::TraceFormat($this);
}
function _toString() {
return $this->string;
}
static private function StringFormat(Exception $exception) {
// ... a function not available in PHP scripts
// that returns all relevant information as a string
}
static private function TraceFormat(Exception $exception) {
// ... a function not available in PHP scripts
// that returns the backtrace as a string
}
}
?>
--------------------------------------------------------------------------------

如果我們定義的一異常類都是繼承自Exception基類
無兼容性問題。老的代碼不會受到這一特性的影響。
Dereferencing objects returned from functions
Php4中不能再次引用函數返回的對象以進一步呼叫返回對象的方法,而php5是可以的。

代碼:--------------------------------------------------------------------------------

<?php
class Circle {
function draw() {
print "Circle\n";
}
}

class Square {
function draw() {
print "Square\n";
}
}

function ShapeFactoryMethod($shape) {
switch ($shape) {
case "Circle":
return new Circle();
case "Square":
return new Square();
}
}

ShapeFactoryMethod("Circle")->draw();
ShapeFactoryMethod("Square")->draw();
?>
--------------------------------------------------------------------------------

靜態成員變數能夠被初始化。
Example

代碼:--------------------------------------------------------------------------------

<?php
class foo {
static $my_static = 5;
public $my_prop = 'bla';
}

print foo::$my_static;
$obj = new foo;
print $obj->my_prop;
?>
--------------------------------------------------------------------------------

靜態方法
PHP 5 引入了靜態方法,可以在不實例化類的情況下呼叫靜態方法。
Example

代碼:--------------------------------------------------------------------------------

<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}

Foo::aStaticMethod();
?>
--------------------------------------------------------------------------------

偽變數$this不能夠在靜態方法方法中使用。
instanceof
Php5引入了instanceof關鍵字,允許用它來測試一個對象是一個類的實例,或者是一個派生類的實例,或者實現了某個介面
Example

代碼:--------------------------------------------------------------------------------

<?php
class baseClass { }

$a = new baseClass;

if ($a instanceof baseClass) {
echo "Hello World";
}
?>
--------------------------------------------------------------------------------

Static function variables
現在,靜態變數在編譯階段處理。因此程序員可以通過引用為靜態變數賦值。這可以改善性能,不過,不能夠使用對靜態變數的間接引用了。
按引用傳遞的函數參數現在也可以設置預設值了。
Example

代碼:--------------------------------------------------------------------------------

<?php
function my_function(&$var = null) {
if ($var === null) {
die("$var needs to have a value");
}
}
?>
--------------------------------------------------------------------------------

__autoload()
__autoload() 攔截函數在一個未聲明的類被初始化的時候自動調用。該類的名字會被自動傳遞給__autoload()函數。而__autoload()也只有這么唯一的一個參數。
Example

代碼:--------------------------------------------------------------------------------

<?php
function __autoload($className) {
include_once $className . ".php";
}

$object = new ClassName;
?>
--------------------------------------------------------------------------------

可重載的方法呼叫和屬性訪問
方法呼叫和屬性訪問都能夠通過__call, __get() and __set()方法重載。
Example: __get() and __set()

代碼:--------------------------------------------------------------------------------

<?php
class Setter {
public $n;
public $x = array("a" => 1, "b" => 2, "c" => 3);

function __get($nm) {
print "Getting [$nm]\n";

if (isset($this->x[$nm])) {
$r = $this->x[$nm];
print "Returning: $r\n";
return $r;
} else {
print "Nothing!\n";
}
}

function __set($nm, $val) {
print "Setting [$nm] to $val\n";

if (isset($this->x[$nm])) {
$this->x[$nm] = $val;
print "OK!\n";
} else {
print "Not OK!\n";
}
}
}

$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_mp($foo);
?>
--------------------------------------------------------------------------------

Example: __call()

代碼:--------------------------------------------------------------------------------

<?php
class Caller {
private $x = array(1, 2, 3);

function __call($m, $a) {
print "Method $m called:\n";
var_mp($a);
return $this->x;
}
}

$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_mp($a);
?>
--------------------------------------------------------------------------------

迭代
當和foreach一起使用對象的時候,迭代的方式被重載過了。預設的行為是迭代類的所有屬性。
Example

代碼:--------------------------------------------------------------------------------

<?php
class Foo {
public $x = 1;
public $y = 2;
}

$obj = new Foo;

foreach ($obj as $prp_name => $prop_value) {
// using the property
}
?>
--------------------------------------------------------------------------------

一個類的所有對象都能夠被迭代瀏覽到, 如果這個類實現了一個空的介面:Traversable. 換句話說,實現了Traversable介面的類可以和foreach一起使用。
介面 IteratorAggregate 和Iterator允許指定類的對象在代碼中如何迭代。IteratorAggregate介面有一個方法:getIterator() 必須返回一個數組
Example

代碼:--------------------------------------------------------------------------------

<?php
class ObjectIterator implements Iterator {

private $obj;
private $num;

function __construct($obj) {
$this->obj = $obj;
}
function rewind() {
$this->num = 0;
}
function valid() {
return $this->num < $this->obj->max;
}
function key() {
return $this->num;
}
function current() {
switch($this->num) {
case 0: return "1st";
case 1: return "2nd";
case 2: return "3rd";
default: return $this->num."th";
}
}
function next() {
$this->num++;
}
}

class Object implements IteratorAggregate {

public $max = 3;

function getIterator() {
return new ObjectIterator($this);
}
}

$obj = new Object;

// this foreach ...
foreach($obj as $key => $val) {
echo "$key = $val\n";
}

// matches the following 7 lines with the for directive.
$it = $obj->getIterator();
for($it->rewind(); $it->hasMore(); $it->next) {
$key = $it->current();
$val = $it->key();
echo "$key = $val\n";
}
unset($it);
?>
--------------------------------------------------------------------------------

新的__toString方法
可以通過覆蓋__toString方法來控制對象到字元串的轉換。
Example

代碼:---------------------------------------

Ⅲ PHP怎麼判斷舊密碼不正確

開啟會話功能,在腳本的最頂端添加session_start();然後在用戶登後,設置一個$_SESSION['valid']=$username即可,後面在修改密碼的時候,凱舉只要將這個變數以及舊密碼盯粗碧進行資料庫比對就行了~
至於怎麼判斷舊密碼錯誤就更簡單了,以$_SESSION['valid']變數進行資料庫查詢,如果密碼與輸入密碼一致則正確,否則錯凳簡誤

Ⅳ php中多維數組的問題

"Griffin"=>array()
表示索引"Griffin"是一個數組。=>可以簡單理解為賦值。這是php里特有的一種寫法。
數組分為2種,一種是自動索引數組。比如
$x=array ("Peter","Lois", "Megan");
那麼$X[0]值為"peter",$X[1]為lois。
還有一種是自定義索引數組。
比如
$x=array ("father"=>"Peter","mother"=>"Lois","son"=> "Megan");
那麼$x["father"] 就為"peter"
用引號圍起來表示這是一個索引字元串值。通常情況下你直接[Griffin]也可以。
但是如果你在系統里有一個變數
$Griffin="son";
那麼$families[Griffin]實際上會等於$families['son']。所以最好用引號圍起來。
更多詳細可以看php手冊數組一章。

==========================================================
數組
PHP 中的 數組 實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型。此類型在很多方面做了優化,因此可以把它當成真正的數組,或列表(向量),散列表(是映射的一種實現),字典,集合,棧,隊列以及更多可能性。數組元素的值也可以是另一個數組。樹形結構和多維數組也是允許的。

解釋這些結構超出了本手冊的范圍,但對於每種結構至少會提供一個例子。要得到這些結構的更多信息,建議參考有關此廣闊主題的其它著作。

語法
定義數組 array()
可以用 array() 語言結構來新建一個 array。它接受任意數量用逗號分隔的 鍵(key) => 值(value) 對。

array( key => value
, ...
)
// 鍵(key) 可是是一個 整數(integer) 或 字元串(string)
// 值(value) 可以是任意類型的值<?php
$arr = array("foo" => "bar", 12 => true);

echo $arr["foo"]; // bar
echo $arr[12]; // 1
?>
key 可以是 integer 或者 string。如果key是一個 integer 的標准表示,則被解釋為整數(例如 "8" 將被解釋為 8,而 "08" 將被解釋為 "08")。key 中的浮點數被取整為 integer。在 PHP 中索引數組與關聯 數組 是相同的,它們都可以同時包含 整型 和 字元串 的下標。

值可以是任意的 PHP 類型。

<?php
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));

echo $arr["somearray"][6]; // 5
echo $arr["somearray"][13]; // 9
echo $arr["somearray"]["a"]; // 42
?>
如果對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。如果指定的鍵名已經有了值,則該值會被覆蓋。

<?php
// 這個數組與下面的數組相同 ...
array(5 => 43, 32, 56, "b" => 12);

// ...
array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
?>
Warning
自 PHP 4.3.0 起,上述的索引生成方法改變了。如今如果給一個當前最大鍵名是負值的數組添加一個新值,則新生成的的索引將為零(0)。以前新生成的索引為當前最大索引加一,和正值的索引相同。

使用 TRUE 作為鍵名將使 integer 1 成為鍵名。使用 FALSE 作為鍵名將使 integer 0 成為鍵名。使用 NULL 作為鍵名將等同於使用空字元串。使用空字元串作為鍵名將新建(或覆蓋)一個用空字元串作為鍵名的值,這和用空的方括弧不一樣。

不能用數組和對象作為鍵(key)。這樣做會導致一個警告:Illegal offset type。

用方括弧的語法新建/修改
可以通過明示地設定值來改變一個現有的數組。

這是通過在方括弧內指定鍵名來給數組賦值實現的。也可以省略鍵名,在這種情況下給變數名加上一對空的方括弧(「[]」)。

$arr[key] = value;
$arr[] = value;
// key 可以是 integer 或 string
// value 可以是任意類型的值如果 $arr 還不存在,將會新建一個。這也是一種定義數組的替換方法。要改變一個值,只要給它賦一個新值。如果要刪除一個鍵名/值對,要對它用 unset()。

<?php
$arr = array(5 => 1, 12 => 2);

$arr[] = 56; // This is the same as $arr[13] = 56;
// at this point of the script

$arr["x"] = 42; // This adds a new element to
// the array with key "x"

unset($arr[5]); // This removes the element from the array

unset($arr); // This deletes the whole array
?>
Note:

如上所述,如果給出方括弧但沒有指定鍵名,則取當前最大整數索引值,新的鍵名將是該值 + 1。如果當前還沒有整數索引,則鍵名將為 0。如果指定的鍵名已經有值了,該值將被覆蓋。

注意這里所使用的最大整數鍵名不一定當前就在數組中。它只要在上次數組重新生成索引後曾經存在過就行了。以下面的例子來說明:

<?php
// 創建一個簡單的數組
$array = array(1, 2, 3, 4, 5);
print_r($array);

// 現在刪除其中的所有元素,但保持數組本身不變:
foreach ($array as $i => $value) {
unset($array[$i]);
}
print_r($array);

// 添加一個單元(注意新的鍵名是 5,而不是你可能以為的 0)
$array[] = 6;
print_r($array);

// 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>
以上常式會輸出:

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
)
Array
(
[5] => 6
)
Array
(
[0] => 6
[1] => 7
)

實用函數
有很多操作數組的函數,參見數組函數一節。

Note:

unset() 函數允許刪除數組中的某個鍵。但要注意數組將不會重建索引。 If a true "remove and shift" behavior is desired, the array can be reindexed using the array_values() function.

<?php
$a = array(1 => 'one', 2 => 'two', 3 => 'three');
unset($a[2]);
/* will proce 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')
?>

foreach 控制結構是專門用於數組的。它提供了一個簡單的方法來遍歷數組。

數組做什麼和不做什麼
為什麼 $foo[bar] 錯了?
應該始終在用字元串表示的數組索引上加上引號。例如用 $foo['bar'] 而不是 $foo[bar]。但是為什麼 $foo[bar] 錯了呢?可能在老的腳本中見過如下語法:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
這樣是錯的,但可以正常運行。那麼為什麼錯了呢?原因是此代碼中有一個未定義的常量(bar)而不是字元串('bar'-注意引號),而 PHP 可能會在以後定義此常量,不幸的是你的代碼中有同樣的名字。它能運行,是因為 PHP 自動將裸字元串(沒有引號的字元串且不對應於任何已知符號)轉換成一個其值為該裸字元串的正常字元串。例如,如果沒有常量定義為 bar,PHP 將把它替代為 'bar' 並使用之。

Note: 這並不意味著總是給鍵名加上引號。用不著給鍵名為常量或變數的加上引號,否則會使 PHP 不能解析它們。

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('html_errors', false);
// Simple array:
$array = array(1, 2);
$count = count($array);
for ($i = 0; $i < $count; $i++) {
echo "\nChecking $i: \n";
echo "Bad: " . $array['$i'] . "\n";
echo "Good: " . $array[$i] . "\n";
echo "Bad: {$array['$i']}\n";
echo "Good: {$array[$i]}\n";
}
?>
以上常式會輸出:

Checking 0:
Notice: Undefined index: $i in /path/to/script.html on line 9
Bad:
Good: 1
Notice: Undefined index: $i in /path/to/script.html on line 11
Bad:
Good: 1

Checking 1:
Notice: Undefined index: $i in /path/to/script.html on line 9
Bad:
Good: 2
Notice: Undefined index: $i in /path/to/script.html on line 11
Bad:
Good: 2

演示此行為的更多例子:

<?php
// Show all errors
error_reporting(E_ALL);

$arr = array('fruit' => 'apple', 'veggie' => 'carrot');

// Correct
print $arr['fruit']; // apple
print $arr['veggie']; // carrot

// Incorrect. This works but also throws a PHP error of level E_NOTICE because
// of an undefined constant named fruit
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit]; // apple

// This defines a constant to demonstrate what's going on. The value 'veggie'
// is assigned to a constant named fruit.
define('fruit', 'veggie');

// Notice the difference now
print $arr['fruit']; // apple
print $arr[fruit]; // carrot

// The following is okay, as it's inside a string. Constants are not looked for
// within strings, so no E_NOTICE occurs here
print "Hello $arr[fruit]"; // Hello apple

// With one exception: braces surrounding arrays within strings allows constants
// to be interpreted
print "Hello {$arr[fruit]}"; // Hello carrot
print "Hello {$arr['fruit']}"; // Hello apple

// This will not work, and will result in a parse error, such as:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// This of course applies to using superglobals in strings as well
print "Hello $arr['fruit']";
print "Hello $_GET['foo']";

// Concatenation is another option
print "Hello " . $arr['fruit']; // Hello apple
?>
當打開 error_reporting 來顯示 E_NOTICE 級別的錯誤(例如將其設為 E_ALL)時將看到這些錯誤。默認情況下 error_reporting 被關閉不顯示這些。

和在語法一節中規定的一樣,在方括弧(「[」和「]」)之間必須有一個表達式。這意味著可以這樣寫:

<?php
echo $arr[somefunc($bar)];
?>
這是一個用函數返回值作為數組索引的例子。PHP 也可以用已知常量,可能之前已經見過

<?php
$error_descriptions[E_ERROR] = "A fatal error has occured";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE] = "This is just an informal notice";
?>
注意 E_ERROR 也是個合法的標識符,就和第一個例子中的 bar 一樣。但是上一個例子實際上和如下寫法是一樣的:

<?php
$error_descriptions[1] = "A fatal error has occured";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
?>
因為 E_ERROR 等於 1, 等等.

那麼為什麼這樣做不好?
也許有一天,PHP 開發小組可能會想新增一個常量或者關鍵字,或者用戶可能希望以後在自己的程序中引入新的常量,那就有麻煩了。例如已經不能這樣用 empty 和 default 這兩個詞了,因為他們是保留字。

Note: 重申一次,在雙引號字元串中,不給索引加上引號是合法的因此 "$foo[bar]"是合法的(「合法」的原文為valid。在實際測試中,這么做確實可以訪問數組的該元素,但是會報一個常量未定義的notice。無論如何,強烈建議不要使用$foo[bar]這樣的寫法,而要使用$foo['bar']來訪問數組中元素。--haohappy注)。至於為什麼參見以上的例子和字元串中的變數解析中的解釋。

轉換為數組
對於任意類型: integer, float, string, boolean and resource,如果將一個值轉換為數組,將得到一個僅有一個元素的數組(其下標為 0),該元素即為此標量的值。換句話說, (array)$scalarValue 與 array($scalarValue) 完全一樣。

If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side. This can result in some unexpected behaviour:

<?php

class A {
private $A; // This will become '\0A\0A'
}

class B extends A {
private $A; // This will become '\0B\0A'
public $AA; // This will become 'AA'
}

var_mp((array) new B());
?>
The above will appear to have two keys named 'AA', although one of them is actually named '\0A\0A'.

將 NULL 轉換到 數組(array) 會得到一個空的數組。

比較
可能使用 array_diff() 和數組運算符來比較數組。

Examples
PHP 中的數組類型有非常多的用途,因此這里有一些例子展示數組的完整威力。

<?php
// This:
$a = array( 'color' => 'red',
'taste' => 'sweet',
'shape' => 'round',
'name' => 'apple',
4 // key will be 0
);

$b = array('a', 'b', 'c');

// . . .is completely equivalent with this:
$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name'] = 'apple';
$a[] = 4; // key will be 0

$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

// After the above code is executed, $a will be the array
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round',
// 'name' => 'apple', 0 => 4), and $b will be the array
// array(0 => 'a', 1 => 'b', 2 => 'c'), or simply array('a', 'b', 'c').
?>
Example #1 Using array()

<?php
// Array as (property-)map
$map = array( 'version' => 4,
'OS' => 'Linux',
'lang' => 'english',
'short_tags' => true
);

// strictly numerical keys
$array = array( 7,
8,
0,
156,
-10
);
// this is the same as array(0 => 7, 1 => 8, ...)

$switching = array( 10, // key = 0
5 => 6,
3 => 7,
'a' => 4,
11, // key = 6 (maximum of integer-indices was 5)
'8' => 2, // key = 8 (integer!)
'02' => 77, // key = '02'
0 => 12 // the value 10 will be overwritten by 12
);

// empty array
$empty = array();
?>
Example #2 集合

<?php
$colors = array('red', 'blue', 'green', 'yellow');

foreach ($colors as $color) {
echo "Do you like $color?\n";
}

?>
以上常式會輸出:

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?
直接改變數組的值在 PHP 5 中可以通過引用傳遞來做到。之前的版本需要需要採取變通的方法:

Example #3 集合

<?php
// PHP 5
foreach ($colors as &$color) {
$color = strtoupper($color);
}
unset($color); /* ensure that following writes to
$color will not modify the last array element */

// Workaround for older versions
foreach ($colors as $key => $color) {
$colors[$key] = strtoupper($color);
}

print_r($colors);
?>
以上常式會輸出:

Array
(
[0] => RED
[1] => BLUE
[2] => GREEN
[3] => YELLOW
)
本例生成一個下標從1開始的數組。This example creates a one-based array.

Example #4 下標從1開始的數組

<?php
$firstquarter = array(1 => 'January', 'February', 'March');
print_r($firstquarter);
?>
以上常式會輸出:

Array
(
[1] => 'January'
[2] => 'February'
[3] => 'March'
)
Example #5 填充數組

<?php
// fill an array with all items from a directory
$handle = opendir('.');
while (false !== ($file = readdir($handle))) {
$files[] = $file;
}
closedir($handle);
?>
數組是有序的。也可以使用不同的排序函數來改變順序。更多信息參見數組函數。可以用 count() 函數來數出數組中元素的個數。

Example #6 數組排序

<?php
sort($files);
print_r($files);
?>
因為數組中的值可以為任意值,也可是另一個數組。這樣可以產生遞歸或多維數組。

Example #7 遞歸和多維數組

<?php
$fruits = array ( "fruits" => array ( "a" => "orange",
"b" => "banana",
"c" => "apple"
),
"numbers" => array ( 1,
2,
3,
4,
5,
6
),
"holes" => array ( "first",
5 => "second",
"third"
)
);

// Some examples to address values in the array above
echo $fruits["holes"][5]; // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]); // remove "first"

// Create a new multi-dimensional array
$juices["apple"]["green"] = "good";
?>
數組(Array) 的賦值總是會涉及到值的拷貝。使用 引用操作符 通過引用來拷貝數組。

<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 is changed,
// $arr1 is still array(2, 3)

$arr3 = &$arr1;
$arr3[] = 4; // now $arr1 and $arr3 are the same
?>

Ⅳ php中如何刷新驗證碼

我做的一個簡單的登錄界面有刷新驗證碼還有注冊功能 希望對LZ有幫助
這個是登錄界面 land.php
<?php
@include_once('global.php');
session_start();
$user = $_POST['username'];
$sql = sprintf("select * from `p_admin` where `username` = '%s'",$user);
//echo $sql;
$query = $db->query($sql);//調用golbal裡面的$db類
$fetch = $db->fetch_array($query);
if($_POST['sccode']==$_SESSION['rand']){
$state = $fetch ? md5($_POST['password'].$extra)==$fetch['password']:FALSE;//是否登錄成功 如果失敗了返回為空echo $state沒有結果
if(!$state)
echo"<script language=javascript>alert('用戶名或密碼錯誤');</script>";

else {
$_SESSION['id'] = $fetch['m_id'];
$_SESSION['shell'] = md5($fetch['username'].$fetch['password']);
$_SESSION['ontime'] = time();
//echo $_SESSION['id']."<br>";
//echo $_SESSION['shell'];
$action = new action();
$action ->get_show_msg('admin/admin_main.php', $show = '操作已成功!');
}
}else
echo "<script language=javascript>alert('驗證碼錯誤');</script>";

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>

<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>用戶登錄</title>
<link href="style/global.css" rel="stylesheet" type="text/css">
<link href="style/link.css" rel="stylesheet" type="text/css">
<link href="style/layoutid.css" rel="stylesheet" type="text/css">
<script language="javascript">
function chform (obj) {
if (obj.username.value == "") {
alert("請輸入用戶名!");
obj.username.focus();
return false;
}
if (obj.password.value == "") {
alert("請輸入密碼!");
obj.password.focus();
return false;
}
if (obj.sccode.value == "") {
alert("請輸入驗證碼!");
obj.sccode.focus();
return false;
}
return true;
}
function RefreshImage(id)
{
document.getElementById(id).src ='Confirm.php?'+Math.random(1);
}
</script>
</head><body>
<!--用戶登錄開始-->
<div class="login">
<form id="form1" name="form1" method="post" action="" onsubmit="return chform(this)">
<ul>
<li class="loginbtbj fright" style="background-image: url("images/hydl.gif");"><a title="" href="javascript:%20close();"><img src="images/close.gif" alt="關閉" align="right" border="0" height="18" width="18"></a></li>
<li class="fyellowxx fcenter">
.............................................................................................................
</li>
<li class="padleft43">
用戶名:<input name="username" size="15" style="width: 150px;" type="text">
</li>
<li class="padleft43">
密碼:<input name="password" size="15" style="width: 150px;" type="password">
</li>
<li class="padleft43">
驗證碼:<input name="sccode" size="6" style="width: 50px;" type="text"><img id="re_confirm" onclick="RefreshImage('re_confirm')" src="Confirm.php">
<a title="看不清?" href="#" onclick="RefreshImage('re_confirm')">看不清?</a> <a href=register.php >注冊</a>

</li>
<li class="fyellowxx fcenter">
.............................................................................................................
<br>
<input name="Submit" src="images/dl.gif" style="border: 0pt none; width: 80px; height: 31px;" type="image">
</li>
</ul>
</form>
</div>
<!--用戶登錄結束-->
</body></html>
這個是驗證碼的程序 confirm.php 圖片什麼的代碼我就不穿了 LZ可以借鑒下 有一點需要注意 就是這個confirm文件裡面不能報錯 我在這卡了很久
因為header這個之前不能輸出文本 所以如果報錯 就會無法顯示驗證碼
<?php
session_start();
$random='';
for($i=1;$i<5;$i++){
$random .= dechex(rand(1,15));}
$_SESSION['rand']=$random;
$im = imagecreatetruecolor(40,20);
$bg = imagecolorallocate($im,0,0,0);
$te = imagecolorallocate($im,255,255,255);
imagestring($im,rand(1,6),rand(1,6),rand(1,6),$random,$te);
header("Content-type: image/jpeg");
imagejpeg($im);
?>

Ⅵ 下面是一段php代碼 就是 注銷session 登錄的,valid_user是什麼意思

valid_user是用戶保存的session的名字 可以隨便起的 統一就行

閱讀全文

與phpvalid相關的資料

熱點內容
爬山演算法相關題目 瀏覽:720
vc編程大全 瀏覽:114
excel表格單列數據加密 瀏覽:646
給同事的解壓話語 瀏覽:990
linux關閉網卡命令行 瀏覽:452
史上最漂亮程序員 瀏覽:768
java實現excel的導入 瀏覽:758
光遇賬號如何轉移安卓 瀏覽:266
5分之13除以26的演算法 瀏覽:342
蘭州安寧區買解壓包子 瀏覽:641
php接收圖片代碼 瀏覽:668
hci命令 瀏覽:662
福建伺服器大區雲空間 瀏覽:840
筆桿子程序員 瀏覽:745
手機軟體易驗證加密 瀏覽:589
文檔加密只讀模式也不能看到 瀏覽:431
把jpg轉換成pdf的軟體 瀏覽:874
linuxeth0mac 瀏覽:192
windows編程知乎 瀏覽:442
壓縮工期超過40 瀏覽:249