php入门

初学者学习路线:
1 html、css和js
2 php基本语法
3 php与html结合,简单动态页面
4 数据库MySQL
5 面向对象编程、MySQL优化、一些模板和框架
6 全站

PHP(超文本预处理器),一种通用开源脚本语言

静态网站:没有数据交互的网站,不支持数据传输的

web服务器端口默认是80
myslq服务器端口默认是3306
ftp端口默认是21

前台:浏览者看到的页面
后台:管理员看的页面,后台用来操作数据,前台用来显示数据

php优点

1.跨平台,能在windows运行,也能在linux上运行
2.开源
3.语法简单,入门快
4.快速地开发网站

php脚本在服务器上执行,然后将纯html结果发送回浏览器

修改host文件时可能因为权限问题导致修改不成功,把它拖到桌面修改后再放回去就好了

语法

  • php脚本可放在文档中任何位置,以<?php开始,以?>结束
  • js可省略分号,但php不可省,单行注释和多行注释都与js的相同

变量

  • 变量必须以$开头,区分大小写,没有变量的声明,创建的时候必须初始化(所以不用声明该变量的数据类型,php 会根据变量的值,自动把变量转换为正确的数据类型)
  • 括号中的变量,双引号会解析变量,单引号则原样输出,所以双引号效率没有单引号高
$x = abc;
echo "text $x text"; //text abc text
echo "text$xtext"; //报错,Undefined variable: xtext
echo "text{$x}text"; //textabctext
echo 'text $x text'; //text $x text
echo 'text {$x} text'; //text {$x} text

除了单双引号,还有字界符声明,用于输入非常大段的字符串

  • php有四种不同的变量作用域,localglobalstaticparameter
  • 和js一样,函数外定义的变量为全局变量,函数内定义的为局部变量,全局变量可以被脚本中的任何部分访问,局部变量只能在函数内使用,但php函数内访问全局变量要使用global关键字,
    php将所有全局变量储存在一个名为$GLOBALS[index]数组中,此数组可在函数内访问也可直接用来更新全局变量
    $x = '我是一个全局变量';
    /*
    function(){
        global $x;
        echo $x;
    }
    f();
    */
    function f(){
        echo $GLOBALS['x'];
    }
    f();
  • 局部变量在函数执行完毕时被销毁,若想将其保存下来,定义变量时加上static即可

可变变量即变量的变量

$n = 'num';
$num = 'number';
echo $$n; //number

变量引用,变量传递是值传递,加上地址符后就成了引用传递

$x = 1;
$y = &$x;
$y = 2;
echo $x,$y;

输出

  • 两种基本输出方式:echo和print,echo输出速度快于print
echo '<p>输出','多个','字符串</p>'; //可以输出一个或多个字符串
print '只能输出一个字符串'; //只允许输出一个字符串,返回值总为 1

数据类型

  • php数据类型有string(字符串)、int(整型)、float(浮点型)、boolean(布尔型)、array(数组)、object(对象)、NULL(空值)和resource(资源)
    字符串由单引号或双引号括起来的字符序列
    整型为整数,可用八进制(0)、十进制或十六进制(0x)表示,var_dump()函数判断变量的数据类型与长度并输出其值,该函数有输出功能
    浮点型为小数或指数形式
    布尔类型为true或false
    NULL表示变量没有值,可通过设置变量值为NULL来清空数据
    主要有三种情况会产生null:
    1 通过赋值明确指定
    2 一个变量没有任何值
    3 使用unset()函数将变量销毁
    empty()会判断传入的变量,若为fales或null,则返回true
    isset()可传入一个或多个变量,只要有一个为null,则返回false

is_*系列函数可判断数据类型,is_int、is_bool、is_float、is_string、is_array、is_object、is_null、is_resource、is_numeric、is_callable,是此类型则返回true,否则false

强制类型转换有三种方式:
1 这三个函数intval()、floatval()、strval()
2 变量前加上类型,$n = (int)12.6
3 使用settype()函数直接改变变量本身,settype($n,'string');

常量

常量是全局的在整个脚本都可使用,被定义后不可被改变,常量名不需要加$修饰符,常量的定义使用define()函数

//define(name,value,boolean),name为常量名,value为常量值,第三个参数可选,true为不区分大小写,默认为false
define('X','abc');
echo X; //函数内访问全局变量需要加global关键字,但常量可直接访问

defined()主是是为了防止其他人绕过安全检查文件,传入常量,如果常量定义了就返回true,否则返回false

字符串变量

并置运算符一个点,可把两个字符串拼串起来,而js使用“+”或concat()方法
strlen()函数获取字符串长度
strpos()函数获取字符串第一次出现的位置(类似js的indexOf()方法),未找到匹配则返回false

$a = 'abc';
$b = '123';
echo strlen($a.$b),'<br>'; //6
echo strpos('abcde','cd') //2

运算符

+、-、、/、%、=、+=、-=、=、/=、%=、自增自减和常规的一样,取反-变为相反数(-x),并置.连接两个字符串(a.b)
php7+版本新增整除运算符intdiv(),intdiv(10,3)结果为3

关系(比较)运算符亦相同,有=和!,100 == '100'为true,!= 等同于 <>

逻辑运算符,与或非异或(&&、||、!、xor),php逻辑的与和或都有两种形式and和&&,or和||,作用相同仅优先级不同,优先级从高到低为:
&&、||、and、or

$a = 3;
$b = false;
$c = $a or $b;
var_dump($c);          // 这里的 $c 为 int 值3,而不是 boolean 值 true,这里不太清楚
$d = $a || $b;
var_dump($d);

异或xor是两个值有且仅有一个为true才返回true

数组运算符
这个不太明白...

条件语句

原理一样,但注意些elseif和else if
switch(n){...}对表达式n进行计算再与每个case的值进行比较,case值可为字符串

数组

php中array()函数用于创建数组,php中有三种数组:数值数组(键为数组)、关联数组(带有指定键,每个键关联一个值)和多维数组
数值数组创建的两种方式:

$fruits = array('litchi','longan','watermelon'); //自动分配id键,id键总是从0开始

$colors = array();
$colors[0] = 'red'; //手动分配id键
$colors[1] = 'orange';

count()函数获取数组长度

echo count($fruits);
//遍历数值数组
for($i = 0; $i < count($fruits); $i++){
    echo $fruits[$i],'<br>';
}

关联数组是使用你分配给数组的指定的键的数组,创建方式有两种:

$person = array('name'=>'Sam','age'=>'18','job'=>'singer');
//或者
$person['name'] = 'Sam';
$person['age'] = '18';
$person['job'] = 'singer'; 
//遍历
foreach($person as $k=>$v){
    echo $k.':'.$v,'<br>';
}

数组中元素可按字母或数字顺序进行升降序,会直接改变原数组
sort()升序
rsort()降序
ksort()根据关联数组的,对数组升序
asort()根据关联数组的,对数组升序
krsort()根据关联数组的,对数组降序
arsort()根据关联数组的,对数组降序

超级全局变量

超级全局变量在php 4.1.0之后被启用, 是php系统中自带的变量,这几个超级全局变量在一个脚本中全部作用域都可用
$GLOBALS ,包含全部全局变量的数组
$_SERVER ,包含头信息、路径及脚本位置等信息的数组,此数组中项目由Web服务器创建,不能保证每个服务器都提供全部项目
$_REQUEST、$_POST、$_GET、$_FILES、$_ENV、$_COOKIE、$_SESSION

函数

php函数不可重载,也就是定义两次的话会报错

魔术常量

有8个魔术常量的值随着它们在代码中的位置改变而改变
LINE :代码当前行
FILE :文件完整路径和文件名,绝对路径
DIR :文件所在目录,等价于dirname(FILE)
FUNCTION :返回函数定义时的名字(区分大小写)
CLASS :返回类定义时的名字(区分大小写)
TRAIT :不清楚
METHOD :返回类中方法定义时的名字(区分大小写)
NAMESPACE :命名空间的名称(区分大小写)

命名空间

解决的问题:一是用户编写的代码与php内部的类、函数、常量或第三方类、函数、常量的名字发生冲突,二是为很长的标识符起别名
默认情况,所有常量、类和函数都放在全局空间下,若使用命名空间,则使用namespace关键字来声明

<html> //致命错误,命名空间必须是程序第一条语句!
namespace MyProject { 
// ...代码...
}
namespace { //全局空间

}

声明命名空间前唯一合法的代码是用于定义源文件编码方式的declare语句
declare(encoding='UTF-8');

面向对象

面向对象程序设计(OOP),如当初学java时提到的,类是创建对象的模板,特征通过属性来刻画,功能通过方法来实现

class Person{
  var $name = 'Sam'; //成员变量使用var声明
  var $age;  //可仅声明也可初始化
  function study(){
        echo $this->name,' is learning...'; //$this代表当前对象
  }
}
$p = new Person();
$p->study();

对象的创建仍是new但变量或方法的访问不是用点,而是->

构造方法是为了给对象的数据(属性)进行初始化

class Person{
  var $name;
  var $age;
  function __construct($name,$age){ //构造方法
    $this->name = $name;
    $this->age = $age;
  }

  function study(){
    echo $this->name,' is learning...';
  }
}
$p = new Person('May','30');
$p->study();

析构函数(destructor)与构造函数相反,对象结束生命时,系统将自动执行析构函数

class Person{
  var $name;
  var $age;
  function __construct($name,$age){ //构造方法
    $this->name = $name;
    $this->age = $age;
  }

  function study(){
    echo $this->name,' is learning...';
  }

  function __destruct(){
    echo  __CLASS__.'的对象已销毁...';
  }
}
$p = new Person('May','30');
$p->study();

访问控制

php对属性或方法的访问控制是通过在前面添加关键字实现
public:类成员可在任何地方被访问
protected:只能在类或子父类中访问,创建的实例对象都不能对其访问
private:只能在本类中访问
类属性必须定义为public、protected或private之一,用var则被视为public
类方法可定义为public、protected或private,不写则默认为public

原文地址:https://www.cnblogs.com/Grani/p/10091130.html