`

php学习

    博客分类:
  • php
 
阅读更多

【函数积累】

比较中文字符时,用

int mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] )

 

string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )

 

 

在mac 10.9, MAMP PRO 2.2环境。coda 2 IDE。

php文件应放在 /Applications/MAMP/htdocs/  下,通过127.0.0.1:8888/fileName.php  访问

 

phpinfo()    获取php服务器端的信息。

 

【超全局变量】在全部作用域中始终可用的内置变量。

$_GLOBALS 引用全局作用域中可用的全部变量
$_SERVER 包含了web 服务器提供的所有信息
$_GET HTTP GET 变量
$_POST HTTP POST 变量
$_FILES

HTTP 文件上传变量

$_REQUEST HTTP REQUEST 变量
$_SESSION SESSION 变量
$_ENV 环境变量
$_COOKIE HTTP Cookies
$php_errormsg 前一个错误信息
$HTTP_RAW_POST_DATA http 原生POST数据
$http_response_header http 响应头
$argc 传递给脚本的参数数目
$argv 传递给脚本的参数数组

参考:http://www.php.net/manual/zh/reserved.variables.php

 

【strpos()】

mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
http://www.php.net/manual/zh/function.strpos.php
返回false,要用===, !== 来比较。
【用户自定义函数】http://www.php.net/manual/zh/functions.user-defined.php

函数无需在调用之前被定义,除非是下面两个例子中函数是有条件被定义时。

当一个函数是有条件被定义时,其定义必须在调用之前先处理。

 

PHP 在用户自定义函数中支持可变数量的参数列表。其实很简单,只需使用 func_num_args()func_get_arg(),和 func_get_args() 函数即可。

 

【匿名函数】(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld
?>

 http://www.php.net/manual/zh/functions.anonymous.php

 

php之外的变量:

【较复杂的表单变量范例】

<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
    echo '<pre>';

    print_r($_POST);
    echo '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';

    echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Name:  <input type="text" name="personal[name]"><br />
    Email: <input type="text" name="personal[email]"><br />
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbr</option>
    </select><br />
    <input type="hidden" name="action" value="submitted" />
    <input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>

 

Array
(
    [personal] => Array
        (
            [name] => heeh
            [email] => lfd@gld.com
        )

    [beer] => Array
        (
            [0] => warthog
            [1] => guinness
        )

    [action] => submitted
    [submit] => submit me!
)

 

【cookies】Cookies 是一种在远端浏览器端存储数据并能追踪或识别再次访问的用户的机制。可以用 setcookie() 函数设定 cookies。Cookies 是 HTTP 信息头中的一部分,因此 SetCookie 函数必须在向浏览器发送任何输出之前调用。

如果要将多个值赋给一个 cookie 变量,必须将其赋成数组。例如:

<?php
  setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
  setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>

 

这将会建立两个单独的 cookie,尽管 MyCookie 在脚本中是一个单一的数组。如果想在仅仅一个 cookie 中设定多个值,考虑先在值上使用 serialize()explode()

 

要注意 PHP 将会自动将变量名中的点替换成下划线

 

htmlspecialchars()   使得 HTML 之中的特殊字符被正确的编码,从而不会被使用者在页面注入 HTML 标签或者 Javascript 代码

 

【使用条件的高级分离术】

<?php if ($expression == true): ?>
  This will show if the expression is true.
<?php else: ?>
  Otherwise this will show.
<?php endif; ?>

要输出大段文本时,跳出 PHP 解析模式通常比将文本通过 echoprint 输出更有效率。

【伪类型与变量】

mixed

mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。

number

number 说明一个参数可以是 integer 或者 float

callback

一些函数如 call_user_func()usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法

void

void 作为返回类型意味着函数的返回值是无用的。void 作为参数列表意味着函数不接受任何参数。

...

在函数原型中,$... 表示等等的意思。当一个函数可以接受任意个参数时使用此变量名。

 

【PHP 支持 8 种原始数据类型】boolean, integer, float, string, array, object, resouce, NULL.

如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype() 函数。要查看某个类型,不要gettype(),而用 is_type 函数。

<?php
$a_bool = TRUE;   // a boolean
$a_str  = "foo";  // a string
$a_str2 = 'foo';  // a string
$an_int = 12;     // an integer

echo gettype($a_bool); // prints out:  boolean
echo gettype($a_str);  // prints out:  string

// If this is an integer, increment it by four
if (is_int($an_int)) {
    $an_int += 4;
}

// If $bool is a string, print it out
// (does not print out anything)
if (is_string($a_bool)) {
    echo "String: $a_bool";
}
?>

 

<?php
$foo = "5bar"; // string
$bar = true;   // boolean

settype($foo, "integer"); // $foo 现在是 5   (integer)
settype($bar, "string");  // $bar 现在是 "1" (string)
?>

 

函数 intval() 来将一个值转换成整型

var_dump(round(25/7));  // float(4)

如果浮点数超出了整数范围(32 位平台下通常为 +/- 2.15e+9 = 2^31,64 位平台下通常为 +/- 9.22e+18 = 2^63),则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

 

 

【决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果】

<?php
echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
?>

 如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数

由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。

 

用双引号定义的字符串最重要的特征是变量会被解析。单引号不会把转义字符和变量解析。

<?php
// 输出: This will not expand: \n a newline
echo 'This will not expand: \n a newline';

// 输出: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>

 

定义数组 array()

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// 自 PHP 5.4 起
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

 key 可以是 integer 或者 stringvalue 可以是任意类型

 

<?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);
?>

 

 【应该始终在用字符串表示的数组索引上加上引号】

 

$foo[bar] = 'enemy';   //error
$foo['bar'] = 'enemy';  //correct

 

// Show all errors
error_reporting(E_ALL);

 当打开 error_reporting 来显示 E_NOTICE 级别的错误(将其设为 E_ALL)时将看到这些错误。默认情况下 error_reporting 被关闭不显示这些。

 

【foreach语法】

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

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

?>

 

 【填充数组】【读目录】

<?php
// fill an array with all items from a directory
$handle = opendir('.');
while (false !== ($file = readdir($handle))) {
    $files[] = $file;
}
closedir($handle); 
?>

 

unset()释放给定的变量

count()计算数组中的单元数目或对象中的属性个数

http://www.php.net/manual/zh/ref.array.php     【数组 函数】

 

【数组赋值   引用运算符(&   )】

 

<?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
?>
 

 

get_resource_type() 

 string get_resource_type ( resource $handle )

此函数返回一个字符串,用于表示传递给它的 resource 的类型。如果参数不是合法的 resource,将产生错误。

 

【usort()  用户自定义的排序】

<?php
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {
    echo "$key: $value\n";
}
?>

 

【回调函数示例】

<?php 

// An example callback function
function my_callback_function() {
    echo 'hello world!';
}

// An example callback method
class MyClass {
    static function myCallbackMethod() {
        echo 'Hello World!';
    }
}

// Type 1: Simple callback
call_user_func('my_callback_function'); 

// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod')); 

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
    public static function who() {
        echo "A\n";
    }
}

class B extends A {
    public static function who() {
        echo "B\n";
    }
}

call_user_func(array('B', 'parent::who')); // A
?>

 

【使用 Closure 示例】

<?php
// Our closure
$double = function($a) {
    return $a * 2;
};

// This is our range of numbers
$numbers = range(1, 5);

// Use the closure as a callback here to 
// double the size of each element in our 
// range
$new_numbers = array_map($double, $numbers);

print implode(' ', $new_numbers);
?>

 

【存取和修改字符串中的字符】

string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改,比如 $str[42]。可以把 string 当成字符组成的 array。函数 substr()substr_replace() 可用于操作多于一个字符的情况。

 

 【$this 是一个特殊的变量,它不能被赋值

 

bool isset ( mixed $var [, mixed $... ] )

检测变量是否设置,并且不是 NULL

 

【定义常量】

可以用 define() 函数来定义常量,在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。常量只能包含标量数据(booleanintegerfloatstring

  • 常量前面没有美元符号($);
  • 常量只能用 define() 函数定义,而不能通过赋值语句;
  • 常量可以不用理会变量的作用域而在任何地方定义和访问;
  • 常量一旦定义就不能被重新定义或者取消定义;
  • 常量的值只能是标量。
 bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

 

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.

define("GREETING", "Hello you.", true);
echo GREETING; // outputs "Hello you."
echo Greeting; // outputs "Hello you."

?>

 

 

 【八个魔术常量】

名称 	          说明
__LINE__ 	文件中的当前行号。

__FILE__ 	文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

__DIR__ 	文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =

__FUNCTION__ 	函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

__CLASS__ 	类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。

__TRAIT__ 	Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

__METHOD__ 	类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

__NAMESPACE__ 	当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。 

 

 【如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。】

 

【自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。】

 

 【php执行运算符】

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

<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>

 

【popen】打开进程文件指针

 resource popen ( string $command , string $mode )

 

<?php
error_reporting(E_ALL);

/* 加入重定向以得到标准错误输出 stderr。 */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>

 

【proc_open】更强大的打开进程函数

 resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )

 http://www.php.net/manual/zh/function.proc-open.php

 

【php CLI command line interface】

http://www.php.net/manual/zh/features.commandline.php

cli专用常量:STDIN, STDOUT, STDERR

 

【计数基本知识】

每个php变量存在一个叫"zval"的变量容器中。一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信息。第一个 是"is_ref",是个bool值,用来标识这个变量是否是属于引用集合(reference set)。通过这个字节,php引擎才能把普通变量和引用变量区分开来,由于php允许用户通过使用&来使用自定义引用,zval变量容器中还有 一个内部引用计数机制,来优化内存使用。第二个额外字节是"refcount",用以表示指向这个zval变量容器的变量(也称符号即symbol)个 数。

---->可用xdebug_debug_zval()显示"refcount"和"is_ref"的值

 

【在PHP执行中,一旦根缓冲区满了或者调用gc_collect_cycles() 函数时,就会执行垃圾回收。】

 

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 $a = 'Z'; $a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '[''Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化。

<?php
$i = 'W';
for ($n=0; $n<6; $n++) {
    echo ++$i . "\n";
}
?>
X
Y
Z
AA
AB
AC

 

+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。】

<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>

 

instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例】

var_dump($a instanceof MyClass);

 

 

分享到:
评论

相关推荐

    几百套PHP学习资料.txt

    ### PHP学习资源详解 #### 一、概述 随着互联网技术的发展与普及,PHP作为一种流行的开源脚本语言,因其易学易用的特点,在Web开发领域占据了举足轻重的地位。对于初学者来说,拥有丰富的学习资源至关重要。《几百...

    我的PHP学习之路

    标题《我的PHP学习之路》所涉及的知识点主要围绕着个人学习PHP编程语言的历程和经验。PHP是一种广泛使用的开源服务器端脚本语言,特别适合于网站开发和网页应用。从描述来看,文章内容可能包含以下几个方面: 1. ...

    PHP学习一本通-2017版

    ### PHP学习一本通-2017版:关键知识点概览 #### 一、心态篇:成功的关键 **1.1 你用哪种心态学习PHP?** - **心态的重要性**:学习PHP之前,确立正确的学习态度至关重要。有两种典型的心态: - “我要学好PHP,...

    PHP学习视频教程 由浅入深.zip

    【PHP学习视频教程 由浅入深.zip】这个压缩包文件包含了全面的PHP学习资源,旨在帮助初级PHP开发者提升技能并逐步进阶。PHP是一种广泛应用于网页开发的服务器端脚本语言,它以其易学易用、开源免费的特性深受程序员...

    100例PHP学习源码

    【PHP学习源码详解】 PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在Web开发领域,PHP的地位不可替代。本资源“100例PHP学习源码”提供了一百个完整的实例,旨在帮助初学者深入理解PHP语法、...

    PHP学习手册程序实例

    《PHP学习手册程序实例》是一本专为初学者设计的指南,旨在帮助读者轻松入门PHP编程。PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源脚本语言,尤其在Web开发领域占据重要地位。通过这本书,你...

    分享自己收藏的PHP学习资料

    这份分享的压缩包文件包含了一系列PHP学习资料,对于初学者或者希望深化PHP技能的人来说,是一份非常宝贵的学习资源。 PHP的特点在于它既可以在服务器端执行,也可以嵌入到HTML代码中,使得动态网页的生成变得简单...

    PHP学习资料---PHP教程

    PHP学习资料.part3.rar共用6份

    php学习网站源码.zip

    【PHP学习资源】:这个压缩包“php学习网站源码.zip”包含了一个完整的PHP学习网站的源代码。网站设计简洁,但功能全面,是初学者和开发者了解PHP编程语言、Web开发以及熟悉CMS(内容管理系统)的理想实践平台。源码...

    PHP学习帮助文档

    该压缩包里包含了一下文件: 1、PHP高级程序设计_模式、框架与测试.pdf 2、php_manual_en.chm ...为了朋友们方便,所以就整合了这些php学习必备的文档,也省的你们到处乱找了,祝朋友们学习和工作愉快!

    php学习资料

    【PHP学习资料详解】 在互联网领域,PHP是一种广泛使用的服务器端脚本语言,尤其在构建动态网站方面扮演着重要角色。这份"php学习资料"涵盖了从基础到进阶的全面内容,旨在帮助初学者和有一定经验的开发者巩固并...

    php实例 php学习 学习php php网站研究

    在"php实例 php学习 学习php php网站研究"这个主题中,我们主要探讨的是PHP的实际应用、学习方法以及其在网站开发中的深入研究。 1. PHP基础:PHP全称“PHP: Hypertext Preprocessor”,是一种服务器端的编程语言。...

    php 学习代码

    【PHP学习代码】这个主题是针对初学者或者希望深化PHP编程技能的人们设计的,它包含了一系列用于教学和实践的代码示例。PHP是一种广泛应用于Web开发的服务器端脚本语言,尤其在构建动态网站方面表现出色。通过学习和...

    php学习总结php学习总结

    php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结php学习总结

    PHP学习资料--php

    PHP(Hypertext Preprocessor..."学习总结.doc"文档可能包含了学习者在PHP学习过程中的笔记、心得和项目经验,这将是你进一步提升PHP技能的重要参考资料。通过深入阅读和实践,你可以巩固理论知识,提升实际开发能力。

    php学习手册

    **PHP学习手册** PHP(全称:Hypertext Preprocessor,即“超文本预处理器”)是一种广泛使用的开源脚本语言,尤其适用于Web开发并可嵌入HTML中。本手册面向所有正在或打算学习PHP的开发者,旨在提供全面、深入的...

    php学习100实例(不要错过,很好的学习资料)

    "php学习100实例"是这样一个资源,它提供了100个精心设计的练习,旨在帮助初学者和有经验的开发者巩固和深化对PHP的理解。这个压缩包特别关注了"循环"这一主题,这在编程中是非常基础且重要的部分。 循环是程序控制...

    php学习资料打包下载

    本压缩包提供了丰富的PHP学习资料,旨在帮助初学者和进阶者深入理解和掌握PHP编程技术。 首先,学习PHP的基础知识至关重要。这包括了解PHP的语法结构,如变量、常量、数据类型、运算符、控制结构(如if-else、...

Global site tag (gtag.js) - Google Analytics