• 5712阅读
  • 0回复

[PHP]php学习手记系列[XChinux] [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
函数 error_reporting(int)
行为受php.ini中的设置的影响。
用户如果想改变默认的错误报告级别设置的话,可以调用这个函数重新设置。参数代表设置的级别。

关于require(), require_once(), include(), include_once()四个函数:
require和include都是将参数中的文件包含进来的意思,其两者唯一的区别就是,在处理情况下,include函数将产生一个报警,而require将产生一个错误。除此之外两者完全一样。
也就是说,在处理失败的情况下,php将继续解析后面的代码,而require将停止。
require_once()和require的区别是,在已经包含了的情况就,require_once将不会再次包含。include_once和incude也是同一个道理。




array explode ( string separator, string string [, int limit])
函数explode用字符串separator把一个字符串string分隔开来,存入一个array中。

string microtime ( void )
函数microtime函数返回当前UNIX时间戳和微秒数
格式为:msec sec



$_SERVER

$HTTP_SERVER_VARS
这两个数组是不一样地,前者是一个超级全局变量。而后者可以被屏蔽掉。
再说说$_SERVER数组:
$_SERVER['SERVER_SOFTWARE']
$_SERVER['SERVER_NAME']
$_SERVER['GATEWAY_INTERFACE']
$_SERVER['SERVER_PROTOCOL']
$_SERVER['SERVER_PORT']
$_SERVER['REQUEST_METHOD']
$_SERVER['PATH_TRANSLATED']
$_SERVER['SCRIPT_NAME']
$_SERVER['QUERY_STRING']
$_SERVER['REMOTE_ADDR']


特别地:
$_SERVER['HTTP_USER_AGENT']将显示客户端浏览器的详细信息。



$_ENV数组也是一个超级全局变量,内含系统中的信息。与$HTTP_ENV_VARS的关系同上。
自动全局变量还有:
$_COOKIE
$_GET
$_POST
$_FILES
$_REQUEST
$_SESSION
$_GLOBALS
还有一个预定义变量是:
$php_errormsg,定义了上一次发生错误的信息。




查看某一数组全部内容的方法:

foreach($arr as $name => $value)
{
echo($name . " => " . $value);
}





int mysql_insert_id ( [resource link_identifier])
mysql_insert_id() 返回给定的 link_identifier 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。

如果上一查询没有产生 AUTO_INCREMENT 的值,则 mysql_insert_id() 返回 0。如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。



查看表达式的值和类型函数:var_dump()
获取类型与判断变量类型:gettype(), is_type()
转换类型:settype()
强制类型转换:([类型名])变量名

rond()函数对浮点数进行四舍五入
<?php
echo round(3.4);     // 3
echo round(3.5);     // 4
echo round(3.6);     // 4
echo round(3.6, 0);   // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);   // 5.04
echo round(5.055, 2);   // 5.06
?>




PHP对Unicode没有本地支持,但通过函数 utf8_encode() 和 utf8_decode() 可以支持Unicode字符处理。

关于字符串使用中的定界符的问题:可以通过
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

/* More complex example, with variables. */
class foo
{
var $foo;
var $bar;

function foo()
{
  $this->foo = 'Foo';
  $this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}

$foo = new foo();
$name = 'MyName';

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>




关于字符串中的复杂(花括号)语法:
在字符串中可以用花括号来界定任何在字符串外的表达式。比如:
echo "this is a sample {$arr[23][32]}";

而如果要访问一个字符串中某位的字符,可以使用花括号来索引,或者使用老的用中括号索引的办法。




定义一个数组的方法:

array( [key =>]
value
, ...
)
// key 可以是 integer 或者 string
// value 可以是任何值

如果要删除一个数组的键值,则用unset()函数。




PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

如果激活了 track_errors 特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg 中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。

<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '$php_errormsg'");

// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.

?>

注: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果你能从某处得到值,你就能在它前面加上 @ 运算符。例如,你可以把它放在变量,函数和 include() 调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。




PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。



break 结束当前 for,foreach,while,do..while 或者 switch 结构的执行。

break 可以接受一个可选的数字参数来决定跳出几重循环。

<?php
$arr = array ('one', 'two', 'three', 'four', 'stop', 'five');
while (list (, $val) = each ($arr)) {
if ($val == 'stop') {
  break;   /* You could also write 'break 1;' here. */
}
echo "$val<br>\n";
}

/* Using the optional argument. */

$i = 0;
while (++$i) {
switch ($i) {
case 5:
  echo "At 5<br>\n";
  break 1; /* Exit only the switch. */
case 10:
  echo "At 10; quitting<br>\n";
  break 2; /* Exit the switch and the while. */
default:
  break;
}
}
?>



continue

continue 在循环结构用用来跳过本次循环中剩余的代码并开始执行下一次循环。

注: 注意在 PHP 中 switch 语句被认为是作为 continue 目的的循环结构。

continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。

<?php
while (list ($key, $value) = each ($arr)) {
if (!($key % 2)) { // skip odd members
  continue;
}
do_something_odd ($value);
}

$i = 0;
while ($i++ < 5) {
echo "Outer<br>\n";
while (1) {
  echo " Middle<br>\n";
  while (1) {
    echo " Inner<br>\n";
    continue 3;
  }
  echo "This never gets output.<br>\n";
}
echo "Neither does this.<br>\n";
}
?>



从函数返回一个引用,你必须在函数声明和指派返回值给一个变量时都使用引用操作符 & :

由函数返回一个引用
<?php
function &returns_reference()
{
return $someref;
}

$newref =& returns_reference();



PHP5中的类启用了新的关键字public, protected和private来标识变量的可见性,而原来PHP4中的var关键则在PHP5中不再被支持,默认地,配置文件中有相关选项使得var被自动认为是public声明的。
PHP5 中则使用了新的构造函数和析构函数__construct()和__destruct()。并且,子类并不会自动调用父类中的构造函数和析构函数,要想调用,得用parent::__construct()或parent::__destruct()来调用。如果在PHP5中未定义__construct ()和__destruct(),则其应用PHP4中的构造函数(与类名相同的函数,即是PHP4中的构造函数)


PHP5中新增加了抽象类和方法(abstract classes and methods).
一个抽象方法,只被声明,但没有实现部分。而一个含有抽象方法的类,需要被声明为抽象的。特别地,抽象类,不能被实例化。

如下面的例子:

<?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中新加的对象拷贝关键字:clone
在要复制一个一模一样的对象时,使用clone关键字来实现:
$object2 = conle $object1;

而在其类中,要定义名为__clone()的函数。如果没定义的话,则对象拷贝发生时,系统将自动复制所有属性。

<?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";
?>
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个