markdown PHP_study

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown PHP_study相关的知识,希望对你有一定的参考价值。

## PHP

### 语法  
- php脚本以<?php开始 以?>结束  
- 注释:
  1. 单行注释://
  2. 多行注释:/* ... */
### php变量
- 变量名必须以字母或者下划线吗字符串开始
- 创建(声明)PHP变量
\-php 没有声明变量的命令。  
变量在第一次赋值给它的时候被创建。  
- php是一种弱类型语言
\-不必声明数据类型,php会根据变量的值,自动把变量转换成正确的数据类型。  
- php变量作用域
\-变量的作用域是脚本中变量可被引用/使用的部分。
\-PHP有四种不同的变量作用域:
  - local
  - global
  - static
  - parameter
- 局部和全局作用域
- global 关键字
global关键字用于函数内访问全局变量。  
php将所有全局变量存储在一个名为$GLOBALS[index]的数组中。
- static作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候需要局部变量不要被删除,这时候需要使用static关键字。  
- 参数作用域

## php echo&print
echo和print的区别:  
  - echo可以输出一个多个字符串。
  - print自允许输出一个字符串,返回值总为1。  
## php常量
### 设置常量
- 语法
```
bool define(string $name, mixed $value [,boll $case_insensitive = false])
```
  - name
  - value
  - case_insensitive: 可选参数,如果设置为TRUE,该常量则大小写不敏感。(默认大小写敏感)
## php_string
### php并置运算符
在php中,只有一个字符串运算符。  
冰之运算符(.)用于把两个字符串连接起来。
### strlen()
### strpos()
用于在字符串内查找一个字符或一段指定的文本。
## php_operator
### php 递增/递减运算符
|运算符|名称|描述|
|------|----|----|
|++x|预递增|x加1,然后返回x|
|x++|后递增|返回x,然后x加1|
|--x|预递减|x减1,然后返回x|
|x--|后递减|返回x,然后x-1|
### php 逻辑运算符
|运算符|名称|描述|
|------|----|----|
|x xor y|异或|如果x和y有且仅有一个为ture,则返回true|
### php 数组运算符
|运算符|名称|描述|
|------|----|----|
|x + y|集合|x和y的集合|
|x === y|恒等|如果x和y具有相同的键/值对,且顺序相同类型,则返回true|
|x !== y|不全等于||
|x != y|不等于||
### 三元运算符
语法:
```(expr1) ? (expr2) : (expr3)```
> 自PHP5.3起,可以省略三元运算符中间的部分。求值为TRUE时返回expr1,否则返回expr3。

普通写法:
```
$test = '菜鸟教程';
// isset()检测变量是否设置,并且不是NULL
$username = isset($test) ? $test : 'nobody';
// PHP_EOL只是一个换行符
echo $username, PHP_EOL;
```

> PHP7+版本多了一个NULL合并运算符??,如果不存在则返回expr3,否则返回expr1。

运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。
```
// 优先级: &&  >  =  >  and
// 优先级: ||  >  =  >  or
```
### PHP中“or”与“||”的区别   
很多人认为PHP中“or”和“||”是可以划等号的,其实不然,它们存在一个优先级的差别。下面通过一个例子说明它们的差异
```
$a = false || true;  
$b = false or true;  
var_dump($a);//true  
echo '<br />';  
var_dump($b);//false
```
执行后,$a为true,而$b为false。这是因为“||”的优先级大于“=”,先执行 false || true,然后将执行后的结果true赋值给$a。而“or”的优先级小于“=”,先将false赋值给$b,因此$b就为false







## PHP 条件语句
- if
- if ... else
- if ... elseif ... else
- switch
```
<?php
switch (n)
{
case label1:
    如果 n=label1,此处代码将执行;
    break;
case label2:
    如果 n=label2,此处代码将执行;
    break;
default:
    如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
```
## PHP数组
数组能够在单个变量中存储多个值:
### 在php 中创建数组
```array();
```  
在PHP中,有三种类型的数组:
- 数值数组 \- 带有数字ID键的数组
- 关联数组 \- 带有指定的键的数组, 每个键关联一个值
- 多维数组 \- 包含一个或多个数组的数组
### 数组函数
- 获取数组的长度 \- count()
- 遍历数值数组:
```
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
 
for($x=0;$x<$arrlength;$x++)
{
    echo $cars[$x];
    echo "<br>";
}
?>
```

### PHP 关联数组
关联数组是使用您分配给数组的指定的键的数组。    
这里有两种创建关联数组的方法  
```
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
```  
or:  

```
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
```  

### 遍历关联数组
遍历并打印关联数组中的所有值,您可以使用 foreach 循环,如下所示:
```
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value)
{
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>
```
##PHP 数组排序
数组中的元素可以按字母或数字顺序进行降序或升序排列。
### PHP \- 数组排序函数
- sort() \- 对数组进行升序排列
- rsort() \- 降序
- asort() \- 根据关联数组值, 对数组进行升序排列
- ksort() \- 根据关联数组的键...
- arsort() \- 根据关联数组的值,对数组进行降序排列
- krsort()
## PHP 超级全局变量
PHP中预定义了几个超级全局变量,这意味着他们在一个脚本的全部作用域中都可用。  
不需要特殊说明,就可以在函数以及类中使用。  
### 超级全局变量列表:
- $GLOBALS \- PHP中的一个超级全局变量组。
- $_SERVER \- 包含了诸如头信息(header)、路径(path)、以及脚本位置(script location)等等信息的数组。
- $_REQUEST \- 用于搜集HTML表单提交的数据(post,get均可)。
```
<html>
<body>
 
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
 
<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>
 
</body>
</html>
```
- $_POST
- $_GET \- 除了接收表单的GET请求,还可以接收a标签的传来的参数。
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
## PHP循环
- while
- do ... while
- for
- foreach \- 根据数组中每个元素来循环代码块。
语法:
```
foreach ($array as $value)
{
    要执行代码;
}
```
## PHP函数
### 创建 PHP 函数
### 添加参数
### 返回值
## PHP 魔法常量
PHP向它运行的任何脚本提供了大量的预定义常量。  
不过很多常量都是由不同的扩展库定义的, 只有加载这些扩展库时才会出现,  
或者动态加载后,或者在编译时已经包括进去了。  
有八个魔术常量他们的值随着它们在代码中的位置改变而改变。  
### \_\_LINE\_\_
文件中的当前行号。
### \_\_FILE\_\_
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
### \_\_DIR\_\_
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在目录。
### \_\_FUNCTION\_\_
### \_\_CLASS\_\_
### \_\_TRAIT\_\_
> php从以前到现在一直到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php除了Trait这个特性。
```
<?php
trait Dog{
    public $name="dog";
    public function bark(){
        echo "This is dog";
    }
}
class Animal{
    public function eat(){
        echo "This is animal eat";
    }
}
class Cat extends Animal{
    use Dog;
    public function drive(){
        echo "This is cat drive";
    }
}
$cat = new Cat();
$cat->drive();
echo "<br/>";
$cat->eat();
echo "<br/>";
$cat->bark();
?>
```
Trait中的方法或属性会覆盖 基类中的同名的方法或属性,而本类会覆盖Trait中同名的属性或方法。
### \_\_METHOD\_\_ 
返回方法定义时的名字。
### \_\_NAMESPACE\_\_ 
当前命名空间的名称(区分大小写)。
## PHP 命名空间(namespace)
> php命名空间可以解决一下两类问题:
1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
### 定义命名空间
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。
### 子命名空间
### 命名空间使用

1. **非限定名称,或不包含前缀的类名称**,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。

2. **限定名称,或包含前缀的名称**,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。

3 .**完全限定名称,或包含了全局前缀操作符的名称**,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。

```file1.php
<?php
namespace Foo\Bar\subnamespace; 

const FOO = 1;
function foo() {}
class foo
{
    static function staticmethod() {}
}
?>
```
```file2.php
<?php
namespace Foo\Bar;
include 'file1.php';

const FOO = 2;
function foo() {}
class foo
{
    static function staticmethod() {}
}

/* 非限定名称 */
foo(); // 解析为函数 Foo\Bar\foo
foo::staticmethod(); // 解析为类 Foo\Bar\foo ,方法为 staticmethod
echo FOO; // 解析为常量 Foo\Bar\FOO

/* 限定名称 */
subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,
                                  // 以及类的方法 staticmethod
echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
                                  
/* 完全限定名称 */
\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
?>
```
### 命名空间和动态语言特征
命名空间中 '\\' 的使用问题。
## PHP 面对对象
**对象的主要三个特性:**
- 对象的行为:可以对对象施加哪些操作。
- 对象的形态: 当施加哪些方法是对象如何响应,颜色,尺寸,外形。
- 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。

### 面向对象内容
- 类 \- 定义了意见事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
- 对象 \- 是类的实列。
- 成员变量
- 成员函数
- 继承
- 父类
- 子类
- 多态
相同的函数或方法可作用域多种类型的对象上并获得不同的结果。
- 重载
简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
- 抽象性
- 封装
- 构造函数
- 析构函数
destructor与构造函数相反,当对象结束其生命周期时,系统自动执行析构函数。析构函数旺旺用来做"清理善后"的工作。

### PHP 构造函数
```
void __construct ([ mixed $args [, $... ]] )
```
### PHP 析构函数
```
void __destruct ( void )
```
**实例:**
```
<?php
class MyDestructableClass {
   function __construct() {
       print "构造函数\n";
       $this->name = "MyDestructableClass";
   }

   function __destruct() {
       print "销毁 " . $this->name . "\n";
   }
}

$obj = new MyDestructableClass();
?>
```
### 继承
### 方法重写
### 访问控制(属性&方法)
### 接口
### 常量(constant)
### 抽象类
### Static 关键字
### Final 关键字
> PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
### 调用父类构造方法
```parent::__construct(); 
```

以上是关于markdown PHP_study的主要内容,如果未能解决你的问题,请参考以下文章

markdown转换为图片

转换rst到markdown总结

markdown [Markdown HowTo]作为Markdown语法的秘籍

python markdown干啥用的

markdown前端渲染

如何用markdown生成目录