您的位置:首页 > 编程语言 > PHP开发

php 基础知识(一)

2017-02-04 10:26 211 查看
0x00 写在前面

关于php基础知识,其实就是php的语法相关,php.net 的文档中基本上涵盖了所有php基础需要的全部内容,如果你计算机和编程的功底比较扎实的话,那里也涵盖了很多中级和高级的东西(不过能看到这篇文章的基本上和我一样菜,所以就不考虑了),当然在初级阶段我们还需要了解一定量的Linux,shell,nginx/Apache,mysql,redis/memcached,html,css,js,c,数据结构.算法等一系列的知识,这里也不详细介绍了,因为是写给我自己的.

0x01 安装与配置

作为初级的知识,大部分情况下,我们不需要自己安装用于生产php的相关环境,而且php相关的环境安装是比较简单的,如果用于测试/开发/学习,我们可以用诸如一键wamp phpstudy, 一键lamp  一键lnmp等前辈们写出来的好东西进行一键进行安装,

当然万一需要我们进行手动安装,需要知道安装配置的选项 在php.net中有详细记载 http://php.net/manual/zh/configure.about.php 一般来讲我们用于生产环境的php都是放在linux 的服务器上面(关键是window和土豪os的我不怎么会),所以这里就只讲linux的

 当然我们有时还要开启一些我们需要的扩展

一个比较完整的configure命令

./configure --prefix=/usr/local/php \

 --with-curl \

 --with-freetype-dir \

 --with-gd \

 --with-gettext \

 --with-iconv-dir \

 --with-kerberos \

 --with-libdir=lib64 \

 --with-libxml-dir \

 --with-mysqli \

 --with-openssl \

 --with-pcre-regex \

 --with-pdo-mysql \

 --with-pdo-sqlite \

 --with-pear \

 --with-png-dir \

 --with-xmlrpc \

 --with-xsl \

 --with-zlib \

 --enable-fpm \

 --enable-bcmath \

 --enable-libxml \

 --enable-inline-optimization \

 --enable-gd-native-ttf \

 --enable-mbregex \

 --enable-mbstring \

 --enable-opcache \

 --enable-pcntl \

 --enable-shmop \

 --enable-soap \

 --enable-sockets \

 --enable-sysvsem \

 --enable-xml \

 --enable-zip

不过由于每个人的系统环境不一致,导致了有一些必要的依赖没有安装,或者某些依赖版本过高(是的你没看错)或过低,这样的情况你需要百度/google进行查找,或者询问更有经验的老司机

在安装配置完成以后,我们可以顺利的进行php的安装,不过我们还需要进行php的运行配置,也就是php.ini的配置,原则上来讲,我们不需要进行任何配置,就可以运行php不过相关的配置在php.net中有详细记载http://php.net/manual/zh/ini.list.php

在我们需要安装一些非标配的php扩展时,这是一个相对比较简单的工作,因为扩展的开发者一般都会很详细的介绍安装的过程

$PHP_BIN/phpize

./configure --with-php-config=$PHP_BIN/php-config

make

make install

这里的$PHP_BIN指的是php的安装目录下的bin目录,像上文,就是/usr/local/php/bin目录

php-config是一个简单的命令行脚本用于获取所安装的 PHP 配置的信息,在php.net中有详细记载http://php.net/manual/zh/install.pecl.php-config.php

然后再php.ini中加上 

extension_dir = xx.so

当然有时我们需要静态的将扩展编译入php,同样php.net中也有详细记载http://php.net/manual/zh/install.pecl.static.php

0x02 基本语法

关于php的语法要从php标记开始 一般php标记入右边<?php ******* ?>  不过在纯php文件中,我们不推荐写结束符号?>  原因是

在不写php结束标签时,默认从开始标签往后都是php代码,如果有其他代码,那就会报错。php只能运行在php标签里面的脚本,在脚本之外的所有字符,包括你看不见的空格或者回车,制表符号,都是作为输出内容会response到客户端的,这样就有可能会产生意想不到的事情。例如文件里面使用了header函数,这个文件同时又包含了另外一个文件,并且被包含的文件的php标签外有空字符,这个时候会报header
already send的错误。我们查看一些网页的源代码看到的开头部分有很多空格和换行,就是因为这个原因导致的。

同 C 或 Perl 一样,PHP 需要在每个语句后用分号结束指令。一段 PHP 代码中的结束标记隐含表示了一个分号;在一个 PHP 代码段中的最后一行可以不用分号结束。如果后面还有新行,则代码段的结束标记包含了行结束。

PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。例如:

<
cf36
span style="display:block;"><?php

    echo "This is a test"; // This is a one-line c++ style comment

    /* This is a multi line comment

       yet another line of comment */

    echo "This is yet another test";

    echo 'One Final Test'; # This is a one-line shell-style comment

0x03 php类型

Boolean 布尔类型
Integer 整型
Float 浮点型
String 字符串
Array 数组
Object 对象
Resource 资源类型
NULL
Callback 回调类型

类型转换

(int), (integer) - 转换为整形 integer
(bool), (boolean) - 转换为布尔类型 boolean
(float), (double), (real) - 转换为浮点型 float
(string) - 转换为字符串 string
(array) - 转换为数组 array
(object) - 转换为对象 object
(unset) - 转换为 NULL (PHP 5)

关于bool类型

当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE 本身
整型值 0(零)
浮点型值 0.0(零)
空字符串,以及字符串 "0"
不包括任何元素的数组
不包括任何成员变量的对象(仅 PHP 4.0 适用)
特殊类型 NULL(包括尚未赋值的变量)
从空标记生成的 SimpleXML 对象
所有其它值都被认为是 TRUE(包括任何资源)。

关于整型

整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。

二进制表达的 integer 自 PHP 5.4.0 起可用。

要使用八进制表达,数字前必须加上 0(零)。要使用十六进制表达,数字前必须加上 0x。要使用二进制表达,数字前必须加上 0b。

Example #1 整数文字表达

<?php

$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
?>


在字符串强制转换成整型的时候只截取从左开始到第一个非数字的字符结束
<?php

$a = (int)'122aaaa'; // 122
$a = (int)'aaa'; // 0
$a = (int)'11aaaa2'; // 11
?>

在数字与字符串比较时,往往把字符串强制转换成整数,会出现一些意想不到的情况如 0 == 'a' 为true 我们应该注意

关于浮点数

由于计算机浮点数表示的方式的原因,进行浮点数的运算往往会有意想不到的结果,所以我们应该把浮点数转换成整数再进行运算,

关于回调类型

回调类型相对而言比较复杂

自 PHP 5.4 起可用 callable 类型指定回调类型 callback。本文档基于同样理由使用 callback 类型信息。

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

一个 PHP 的函数以 string 类型传递其名称。可以使用任何内置或用户自定义函数,但除了语言结构例如:array(),echo,empty(),eval(),exit(),isset(),list(),print 或 unset()。
一个已实例化的对象的方法被作为数组传递,下标 0 包含该对象,下标 1 包含方法名。
静态类方法也可不经实例化该类的对象而传递,只要在下标 0 中包含类名而不是对象。自 PHP 5.2.3 起,也可以传递 'ClassName::methodName'。
除了普通的用户自定义函数外,create_function() 可以用来创建一个匿名回调函数。自 PHP 5.3.0 起也可传递 closure 给回调参数。

回调类型的应用相对比较灵活复杂,我们经常在mvc框架中使用call_user_func()来拦截路由运行对应的controller方法还有很多更灵活的应用这里就不举例了(主要是一下想不起来了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: