美文网首页我爱编程
学习PHP与mySQL的辛酸史(一)PHP基本语法

学习PHP与mySQL的辛酸史(一)PHP基本语法

作者: 阿木林_李 | 来源:发表于2018-01-30 08:51 被阅读0次

    此文记录自己学习PHP和mySQL的过程。之前在网上简单地学习了一下这两门语言,并且自己编写了PHP,可以正常连接mySQL,也可以插入数据。但是自己总觉得还是不太清晰。所以借了本O'REILLY的PHP,MySQL,JavaScript, & CSS。希望能够理清一下编程思路,学得更加通透些,对自己以后编写项目有所帮助。

    首先,来了解一下,这几门语言主要负责些什么。PHP是负责主要的在服务器上的工作,MySQL是负责所有的数据,CSS和JavaScript则是管理网页的展现。然而JavaScript也能与PHP进行通信,无论什么时候需要更新一些服务器上的或是页面上的信息。


    PHP

    PHP是相对松散的语言。也就是它的变量类型不需要在使用前被声明。字符串内的数字可以被自动转换为数字类型。

    PHP是用 ‘$' 来定义变量的。比如:$ my_counter = 1;

    使用空格(whitespace)让代码变得更加整洁清晰,当自己回头再去查看的时候也比较容易理解。同时也帮助其他的开发人员去维护你的代码。如果需要声明一个数字变量,无论是Int类型还是Float类型都可以直接声明。

    例如:$ count = 17;$ count = 17.5;

    PHP的变量起名规则

    1. 以字母开始或 ‘_’(underscore);

    2. 只能包含a-z, A-Z, 0-9 和 ‘_’ (underscore);

    3. 不能包含空格,如果一定包含两个单词,一定用 ‘_’ (underscore)来分开;

    4. 对大小写是sensitive的,$High_Score与$high_score是不同的变量。

    PHP的常量(constants)

    1. 声明一个常量不需要用($),一般以字符或下划线开头

    2. 只能用define方法来赋值给常量 define ( 'TIREPRICE' , 100 ) ;

    3. 在脚本中无法改变该值。

    4. 与变量不同,常量贯穿整个脚本是自动全局的。

    5. 尽量不要前后都使用(_)来起变量名。

    设置常量,使用 define() 函数 - 它使用三个参数:

    首个参数定义常量的名称    第二个参数定义常量值    可选的第三个参数规定常量名是否对大小写不敏感。默认是 false。

    简短风格 short style : $tireqty 非常方便,但是需要将register_globals配置选项置为on,由于安全性原因,该选项默认为off。

    中等风格 Medium style: $_POST[ ' tireqty ' ] 推荐使用

    冗长风格 Long style $HTTP_POST_VARS[ ' tireqty' ] 已经被弃用

    我们通常建议使用中等风格来声明变量。如果你建立一个简短风格,然后把中等风格赋值给它没有安全问题,反而更容易被使用。$tireqty = $_POST [ 'tireqty' ] ;


    PHP的字符串规则

    单引号是不会把文字里中以$开头的字符串作为变量的。如果要把它当做变量来看待那就需要用双引号。如果字符串内要使用单引号的话,不能直接使用,这个和JavaScript一样。需要转义字符用“\”来解决单引号问题。此外,\t,\n,\r在双引号里才有效。

    PHP还提供了多行数列的操作符“<<<”,优点是输出大段HTML方便,不需要转义,而且可以引用变量。“<<<”之后跟随任意你自己喜欢的名字(自定义分界符),并以此未结束。之间文字打回车不会被显示。里面的变量将可以使用,如果不需要出现变量可以用 “.”来连接。此时就不会被解读为变量了,而是正常输出。

    在使用(<<<)时,还需注意的一点是,标识符结束符串(如:END)需要独占一行,前后都不许再有内容包括空格,否则这个PHP文件就相当于废了。


    echo和print命令的区别

    这两个命令是十分相似的。但是print是一个函数方法需要用到一个参数,然而echoPHP语言的结构。在普通的文字输出上,echo要比print稍微快一点,因为它不是一个函数不需要设置一个返回值。同时,因为echo它不是一个函数,所以不能被用于大量复杂的表达式,但是print却可以。


    PHP的函数方法

    Function是用来区分出为了实现不同特殊功能的代码。比如这个代码打印三行字,但是如果我要打印十几个的话,就需要不停复制黏贴这些代码,无疑是让代码变得更为复杂和庞大。但是用了function就只需要使用一次函数就可以打印十几次。它是代码变得更简洁并且可读性更高。声明function的方式与JavaScript一样。

    比如:

    function longdate($timestamp){ 

        return date("l F jS Y",$timestamp);

    }


    PHP的变量作用域(Variable Scope)

    在PHP语言中,你可以决定变量的作用域,比如,只在函数里面使用,或者是全域范围的,任何范围都能被使用。

    Local Variables(本地变量)是指变量被建立只被允许在函数中调用。它是零时性的储存,一旦函数完成也就不存在了。

    Global Variables(全局变量)有些时候我们也需要全局变量,因为你希望你所有的代码都能调用到它。当需要声明全局变量时,我们需要使用关键字global。不建议使用全局变量,实在没有其他方法时,可以使用。因为一般程序是被打碎成多个小零件,这样数据发生问题也是一些小问题容易被维护。但是如果上千行的代码程序被发现你的全局变量出现了问题。那么将需要花非常大的精力与时间去维护它。同时,建议在为全局变量起名时,最好使用大写字母。

    Static Variables(静态变量)当你使用一个变量希望它只能在函数中被调用,但是你也希望它能再下一次使用这个函数时,值不会被恢复到原来的值。这时我们就需要用到静态变量。同时需要注意的是,静态变量不能给予一个计算公式或者函数,必须赋一个实际的值。

    比如:

    static $int = 0; //Allowed

    static $int = 1+2; //Disallowed (will produce a Parse error)

    static $int = sqrt(144); //Disallowed

    Superglobal Variables(超级全局变量)PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。

    这些超全局变量是:

    $GLOBALS

    $_SERVER

    $_REQUEST

    $_POST

    $_GET

    $_FILES

    $_ENV

    $_COOKIE

    $_SESSION

    这些超级全局变量名都是使用_下划线和大写字母,所以在起名时应该避免重复以造成程序混乱。


    PHP表达式(Expression)

    布尔表达式,值得注意的一点是,在PHP中,TRUE的值为“1”,而FALSE的值为NULL,或者是空值。因为在一些语言里FALSE被定义为0或者-1。

    此外,PHP会按照字面上的值(literals)理解去判断变量类型。

    比如:

    $myname = "Brian";

    $myage = 37;

    echo "a: " . 73             . "<br/>"; //Numeric literal

    echo "b: " . "Hello"      . "<br/>"; //String literal

    echo "c: " . FALSE      . "<br/>"; //Constant literal

    echo "d: " . $myname  . "<br/>"; //Variable string literal

    echo "e: " . $myage     . "<br/>"; //Variable numeric literal

    结果是:

    a: 73 b: Hello c:        d: Brian  e: 37

    PHP运算符(operators)

    PHP提供了大量有用的运算符,比如计算,字符串和逻辑的运算符。“.”运算符用来连接字符串。

    PHP 逻辑运算符(logical)

    or”返回值是布尔值。如果 $x 和 $y 至少有一个为 true,则返回 true。

    xor”返回值是布尔值。条件中不是A就是B。如果A就返回True,如果是B也返回True。但如果是A和B就返回False,如果即不是A也不是B就返回False。所以条件符合的有且仅有一个为 true,则返回 true。

    PHP 结合性运算符(associativity)

    这类型的运算符是从右到左计算。

    Operator                                          Description                               Example

    NEW                                                Create a new object

    !                                                        Logical NOT

    ~                                                       Bitwise NOT

    ++   --                                                Increment and decrement

    + -                                                     Unary plus and negation

    (int)                                                   Cast to an integer                        $c = (int) ($a / $b);

    (double)                                            Cast to a float

    (string)                                              Cast to a string

    (array)                                               Cast to an array

    (object)                                              Cast to an object

    @                                                       Inhibit error reporting          

    @是为了抑制错误显示,让用户看不到,提升用户体验。注意:只是抑制错误,但是错误还是存在的。

    =                                                         Assignment


    PHP条件表达式(Conditionals)

    条件表达式是动态页面的核心,它能够简单地根据不同的条件创造出不同的页面结果。有三种表达方法:ifswitch?(三目运算符)。这个和JavaScript都是一样的。


    PHP循环(Looping)

    能快速地周而复始地工作直到事情发生为止。循环方式有:whiledo……whilefor。


    PHP的函数与对象

    函数的好处:

    1. 简洁

    2. 减少语法和其他编写程序的错误

    3. 减少程序文件的加载时间

    4. 同时减少执行时间,因为每一个函数都仅仅被解析一次,无论它将被调用多少次。

    5. 函数接受参数,这样能够被普遍使用,也同时能被特殊的情况使用。

    PHP有上百种已经编写好的函数,使它成为一个丰富的语言。


    Includerequire

    require()的性能与include()相类似,都是包括并运行指定文件。不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次。这就意味着如果可能执行多次的代码,则使用require()效率比较高。另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句。

    require的使用方法如:require("myfile.php"),这个语句通常放在PHP脚本程序的最前面。PHP程序在执行前,就会先读入require()语句所引入的文件,使它变成PHP脚本文件的一部分。include使用方法和require一样如:include("myfile.php"),而这个语句一般是放在流程控制的处理区段中。PHP脚本文件在读到include()语句时,才将它包含的文件读取进来。这种方式,可以把程式执行时的流程简单化。

    include在用到时加载   require在一开始就加载

    include/require_once后缀表示已加载的不加载

    PHP系统在加载PHP程序时有一个伪编译过程,可使程序运行速度加快。但include的文档仍为解释执行。include的文件中出错了,主程序继续往下执行,require的文件出错了,主程序也停了,所以包含的文件出错对系统影响不大的话(如界页面文件)就用include,否则用require

    require()include()语句是语言结构,不是真正的函数,可以像php中其他的语言结构一样,例如echo()可以使用echo("ab")形式,也可以使用echo "abc"形式输出字符串abc。require()include()语句也可以不加圆括号而直接加参数。

    include_once()require_once()语句也是在脚本执行期间包括运行指定文件。此行为和include()语句及require()类似,使用方法也一样。唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。这两个语句应该用于在脚本执行期间,同一个文件有可能被包括超过一次的情况下,确保它只被包括一次,以避免函数重定义以及变量重新赋值等问题。

    function_exists("function name")是判断这个函数是否有效。


    对象Object

    面对对象(object-oriented programming OOP)让函数提升到新的水平。当一些方法要被重用,那么就可以考虑把这些方法和数据放入到对象中去。一起想想看一个社交网站,它有很多部分组成。一个组成部分是要管理所有的用户函数。比如让新用户注册,和让存在的用户更改他们的信息。一般来说,我们会建立一些函数去管理这些并且请求MySQL数据库去记录所有的用户。而我们知道对象后,完全可以建立一个名为User的对象,并且把所有的数据与方法放入到这个对象中里。那么无论什么时候当需要去操作一个用户的数据时,我们就可以简单地建立一个和User类有关的对象。对象中的数据被称为属性,对象中的函数被称为方法。如果你发现需要类外一个类,这个类与User类很相似,但有些不同,这时我们就需要继承User类。那么原来的User类就被成为父类(superclass),而新的类就被成为子类(subclass/derived class)。

    声明一个类(Declaring a Class

    在使用一个对象之前,必须用关键字class定义一个类。定义一个类包含类名(它是大小写sensitive的),类的属性,和类的方法。可以使用 '->' 来给变量/属性进行赋值。这是变量不需要用$进行声明。

    构造函数(Constructors)

    在类里面带有参数并且与类名相同的方法被称为构造函数。现在很多使用__construct来命名构造函数。当不再需要这个对象的时候,就需要调用destructor,来释放这个对象所占的内存。但是destructor不需要设计,因为系统会自动释放特定的内存。除非你用到了动态内存,那么你就是要自己设计一个destructor告诉系统释放哪些内存。

    声明一个方法(Methods)

    声明一个方法与声明一个函数非常类似,但还是有少许不同。比如,方法的命名开头跟随两个下划线(__)。$this是指代现在这个对象,并返回这个对象的属性值。

    静态方法(static methods)

    在php编程中,static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”

    如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。

    <?php

    User::pwd_string();

    class User

    {

        static function pwd_string()

        {

            echo "Please enter your password";

        }

    }

    ?>

    声明属性(Declaring Properties)

    声明属性不是必须在类里的,类里没有属性和方法但仍然是合法的。但是为了帮助自己和其他人更好地理解与维护代码,还是建议把属性的声明放入到类里。

    <?php

    $object1 = new User();

    $object1->name = "Alice";

    echo $object1->name;

    class User {}

    ?>

    声明一个常量(Declaring Constant)

    定义一个常量需要在常量名前加const。常量名一般使用大写字母,使他们变得更为突出。当常量/变量使用关键字self两个冒号(::),就能够被直接引用。

    属性和方法的作用域(Property and Method Scope)

    PHP提供了3个关键字来控制属性和方法的作用域。

    1. public —— 这些属性是用varpublic关键字声明的。pubilic与var是能够被互换的,虽然这是不被赞成的。当外部的代码要调用这个属性,或者拓展类需要继承它,我们就应该用public来声明。

    2. protected —— 这些属性和方法只能被对象中的方法和任何子类引用。当不想被外部代码来调用,但是拓展类希望继承它,我们就可以用protected来声明。

    3. private —— 这些成员仅能被同一个类引用,子类也是不能引用的。当我们不想这些成员被外部任何代码方法或者类来调用,就应该使用private来进行声明。

    静态属性和方法(static properties and methods)

    静态方法可以被直接调用,而属性是不可以的。属性的调用可以使用关键字self和双冒号的方法来调用类内部的静态属性。

    继承(Inheritance)

    任何类都能被继承。减少代码的重复性,只要改变一小部分,调整不同的地方。使用关键字extends进行拓展声明。


    PHP数组(Arrays)

    is_array($array_name)返回布尔值,可以判断这个数组是否是有效的。

    sort($array_name, SORT_NUMERIC/STRING)通过数字和字符串从小到大排序。

    rsort($array_name, SORT_NUMERIC/STRING)通过数字和字符串从大到小排序。

    shuffle($array_name)打乱数组,随机排序。

    explode(' ',"string")这个是十分有用的方法,他会把输入的string,通过要求分隔成单个元素然后放入数组中。第一个参数是通过什么来分割,第二个是放入的string。

    extract()这个方法可以很容易地把数组变成键值对的形式。经常可以用于$_POST$_GET

    extract(array,extract_rules,prefix)有三个参数,

    第一个array必需。规定要使用的输入。

    第二个extract_rules可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中的变量名是否冲突。对非法、数字和冲突的键名的处理将根据此参数决定。可以是以下值之一:

    可能的值:

    EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。

    EXTR_SKIP - 如果有冲突,不覆盖已有的变量。(忽略数组中同名的元素)

    EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。自 PHP 4.0.5 起,这也包括了对数字索引的处理。

    EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix(第三个参数)。

    EXTR_PREFIX_INVALID - 仅在非法或数字变量名前加上前缀 prefix。本标记是 PHP 4.0.5 新加的。

    EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。

    EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。本标记是 PHP 4.2.0 新加的。

    EXTR_REFS - 将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。本标记是 PHP 4.3.0 新加的。

    第三个参数,prefix可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。前缀和数组键名之间会自动加上一个下划线。

    代码如下:

    <?php

        $a = 'Original'; 

        $my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse"); 

        extract($my_array); 

        echo "\$a = $a; \$b = $b; \$c = $c"; 

    ?> 

    输出: 

    $a = Cat; 

    $b = Dog; 

    $c = Horse 

    使用全部参数: 

    代码如下:

    <?php

        $a = 'Original'; 

        $my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse"); 

        extract($my_array, EXTR_PREFIX_SAME, 'dup'); 

        echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a;";     

    ?> 

    输出: 

    $a = Original; 

    $b = Dog; 

    $c = Horse; 

    $dup_a = Cat; 

    在action.php中只要使用extract()函数将$_POST全局数据解开: 

    action.php 

    代码如下:

    <?php

        extract($_POST);  //相当于$username = $_POST['username'];  //$password = $_POST['password']; 

    ?> 

    compact(var1,var2...)函数创建一个由参数所带变量组成的数组。如果参数中存在数组,该数组中变量的值也会被获取。

    本函数返回的数组是一个关联数组,键名为函数的参数,键值为参数中变量的值。

    本函数执行的行为与extract()正好相反。

    例子 1

    使用不匹配变量的字符串,以及一个变量名数组:

    <?php

        $firstname = "Bill";

        $lastname = "Gates";

        $age = "60";

        $name = array("firstname", "lastname");

        $result =compact($name, "location", "age");

        print_r($result);

    ?>

    输出结果:

    Array ( [firstname] => Bill [lastname] => Gates [age] => 60 )

    其他相关的方法:

    current() - 返回数组中的当前元素的值

    end() - 将内部指针指向数组中的最后一个元素,并输出

    next() - 将内部指针指向数组中的下一个元素,并输出

    prev() - 将内部指针指向数组中的上一个元素,并输出

    each() - 返回当前元素的键名和键值,并将内部指针向前移动


    printf(arg1,arg2,agr++)函数输出格式化的字符串。arg1arg2arg++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。

    参数                                                                                             描述

    format                                                                                          必需。规定字符串以及如何格式化其中的变量。

                                                                                                        可能的格式值:

                                                                                                         %% - 返回一个百分号 %

                                                                                                         %b - 二进制数

                                                                                                         %c - ASCII 值对应的字符

                                                                                                         %d - 包含正负号的十进制数(负数、0、正数)

                                                                                                        %e - 使用小写的科学计数法(例如 1.2e+2)

                                                                                                        %E - 使用大写的科学计数法(例如 1.2E+2)

                                                                                                        %u - 不包含正负号的十进制数(大于等于 0)

                                                                                                        %f - 浮点数(本地设置)

                                                                                                        %F - 浮点数(非本地设置)

                                                                                                        %g - 较短的 %e 和 %f

                                                                                                        %G - 较短的 %E 和 %f

                                                                                                        %o - 八进制数

                                                                                                        %s - 字符串

                                                                                                        %x - 十六进制数(小写字母)

                                                                                                        %X - 十六进制数(大写字母)

                                                                                                        附加的格式值。必需放置在 % 和字母之间(例如 %.2f):

                                                                                                        + (在数字前面加上 + 或 - 来定义数字的正负性。默认地,只有负数做标记,正数不做标记)

                                                                                                        ' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。)

                                                                                                        - (左调整变量值)

                                                                                                        [0-9] (规定变量值的最小宽度)

                                                                                                       .[0-9] (规定小数位数或最大字符串长度)

                                                                                                        注释:如果使用多个上述的格式值,它们必须按照上面的顺序进行使用,不能打乱。

    arg1                                                                                            必需。规定插到 format 字符串中第一个 % 符号处的参数。

    arg2                                                                                            必需。规定插到 format 字符串中第二个 % 符号处的参数。

    arg++                                                                                         可选。规定插到 format 字符串中第三、四等等 % 符号处的参数。

    PHP printf() 函数


    附录:

    syntax               /'sintœks/               语法 

    keep track of                                   记录

    manipulate       /məˈnɪpjuleɪt/          操作

    colon                /ˈkəʊlən/                  冒号

    deprecate         /ˈdeprəkeɪt/             不赞成

    相关文章

      网友评论

        本文标题:学习PHP与mySQL的辛酸史(一)PHP基本语法

        本文链接:https://www.haomeiwen.com/subject/mflcrxtx.html