php笔记

1.要在一个函数中访问一个全局变量,需要使用 global 关键字。

function myTest()
{
    global $x,$y;
    $y=$x+$y;
}
 

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

$x=5;
$y=10;
 
function myTest()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 

 

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

要做到这一点,请在您第一次声明变量时使用 static 关键字:

function myTest()
{
    static $x=0;
    echo $x;
    $x++;
}
 
myTest();
myTest();
myTest();
?>

函数参数

<?php
function myTest($x)
{
    echo $x;
}
myTest(5);
?>

echo 和 print 区别:

  • echo - 可以输出一个或多个字符串
  • print - 只允许输出一个字符串,返回值总为 1

 PHP var_dump() 函数返回变量的数据类型和值:

$x = 10.365;
var_dump($x);

 

在 PHP 中,对象必须声明。

首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。

<?php
class Car
{
  var $color;
  function Car($color="green") {
    $this->color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>

  以上实例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。

定义常量

最后一个参数是大小写是否敏感

define("GREETING", "欢迎访问 Runoob.com");

define("GREETING", "欢迎访问 Runoob.com", true);

字符串

并置运算符 (.) 用于把两个字符串值连接起来。

<?php 
$txt1="Hello world!"; 
$txt2="What a nice day!"; 
echo $txt1 . " " . $txt2; 
?>

strlen() 函数返回字符串的长度(字符数)。

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

<?php 
echo strpos("Hello world!","world"); 
?>

== 等于

===绝对等于,类似js里的===

and 与,or 或,xor 异或

&& 与,|| 或,!非

数组合并用 + 

$x = array("a" => "red", "b" => "green"); 
$y = array("c" => "blue", "d" => "yellow"); 
$z = $x + $y; // $x 和 $y 数组合并

数组

$cars=array("Volvo","BMW","Toyota");

遍历数组

<?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");
echo "Peter is " . $age['Peter'] . " years old.";
?>

 

数组排序:很多种比如

<?php
$cars=array("Volvo","BMW","Toyota");
sort($cars);
?>

PHP超级全局变量

http://www.runoob.com/php/php-superglobals.html

PHP 超级全局变量列表:

  • 全局变量数组
  • $GLOBALS
  • 获取server相关变量的值,比如$_SERVER['REMOTE_ADDR']来获取ip
  • $_SERVER
  • 获取页面传来的参数,比如$name = $_REQUEST['fname']; 
  • $_REQUEST
  • $name = $_POST['fname']; 
  • $_POST
  • echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

post实例

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_POST['fname']; 
echo $name; 
?>

</body>
</html>

foreach循环

<?php
$x=array("one","two","three");
foreach ($x as $value)
{
    echo $value . "<br>";
}
?>

PHP 的真正威力源自于它的函数。

在 PHP 中,提供了超过 1000 个内建的函数。

PHP 魔术变量

<?php echo '这是第 " ' . __LINE__ . ' " 行'; ?>

<?php echo '该文件位于 " ' . __FILE__ . ' " '; ?>

<?php echo '该文件位于 " ' . __DIR__ . ' " '; ?>
<?php function test() { echo '函数名为:' . __FUNCTION__ ; } test()?>
<?php function test() { echo '函数名为:' . __METHOD__ ; } test(); ?>

__TRAIT__

优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

<?php
class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
 
trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
 
class MyHelloWorld extends Base {
    use SayWorld;
}
 
$o = new MyHelloWorld();
$o->sayHello();
?>

默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。

< ?php  
// 定义代码在 'MyProject' 命名空间中  
namespace MyProject;  
 
// ... 代码 ...  

以下代码会出现语法错误:
html> <?php namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句 ?>

 

子命名空间

<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间


PHP 面向对象

对象的主要三个特性:

  • 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。
  • 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
  • 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。

类定义如下

<?php
class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>

 

$runoob = new Site; 

// 调用成员函数,设置标题和URL 
$runoob->setTitle( "菜鸟教程" ); 

// 调用成员函数,获取标题和URL 
$runoob->getTitle(); 

构造函数

function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
}

析构函数

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数

<?php
class MyDestructableClass {
   function __construct() {
       print "构造函数\n";
       $this->name = "MyDestructableClass";
   }

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

$obj = new MyDestructableClass();
?>

继承

class Child extends Parent {
   // 代码部分
}

接口
<?php

// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 实现接口
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

常量

const constant = '常量值';

抽象类
bstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . PHP_EOL;
    }
}

static final同java

调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-07-23 09:08  lakeslove  阅读(286)  评论(0编辑  收藏  举报