PHP常量
PHP常量大写
PHP常量用define函数或const关键字定义
一个常量一旦被定义,就不能再改变或者取消定义。
在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。

预定义常量:
__LINE__
__FILE__

define("FOO1", "something1");
define("FOO2", "something2");
define("FOO3", "something3");
const CONSTANT = 'FOO';

echo FOO1;
echo '<br/>';
echo FOO2;
echo '<br/>';
echo FOO3;
echo '<br/>';
echo CONSTANT;

PHP5魔术常量
__LINE__,文件中的当前行号
__FILE__,文件的完整路径和文件名
__DIR__,文件所在的目录
__FUNCTION__,函数名称
__CLASS__,类的名称
__TRAIT__,Trait的名字
__METHOD__,类的方法名
__NAMESPACE__,当前命名空间的名称

header('Content-Type: text/html; charset=utf-8');

echo '魔术常量';
echo '<br/>';
echo '当前行号:'.__LINE__;
echo '<br/>';
echo '文件的完整路径和文件名:'.__FILE__;
echo '<br/>';
echo '文件所在的目录:'.__DIR__;
echo '<br/>';

function my_test() {
    echo '当前函数的名字:'.__FUNCTION__;
}
my_test();
echo '<br/>';

class my_class {
    public $name = __CLASS__;
}
$my_class = new my_class();
echo '当前类的名字:'.$my_class -> name;
echo '<br/>';

PHP运算符

PHP控制语句

$a = 5;
$b = 3;

if ($a > $b)
echo "a is bigger than b";
$people = Array(
    Array('name' => 'namea', 'salt' => 1111),
    Array('name' => 'nameb', 'salt' => 2222)
);

for($i = 0, $size = sizeof($people); $i < $size; $i++) {
    $people[$i]['salt'] = rand(0000, 9999);
}

var_dump($people);
$arr = array(1, 2, 3, 4);

foreach($arr as &$value) { // 必须写引用,不然执行下面代码块的东西会报错
    $value = $value * 2;
    echo $value .'<br/>';
}

var_dump($arr);
echo '<br/>';

unset($value); // 取消掉引用
var_dump($arr);

break语句
break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。 break 可以接受一个可选的数字参数来决定跳出几重循环。
break 可以接受参数,停止几个结构的执行,默认是1

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');

while (list(, $var) = each($arr)) {
    if ($var == 'stop') {
        break;
    }

    echo "$var<br/>";
}

$i = 0;
while(++$i) {
    switch($i) {
        case 5:
            echo 'At 5 <br/>';
            break 1; // 只退出switch
        case 10:
            echo 'At 10 <br/>';
            break 2; // 退出switch和while
        default:
            break;
    }

}

continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1

declare语句
什么是低级语句呢?它包括:
简单语句:空语句(就一个;号),return, break, continue, throw, goto, global, static, unset, echo, 内置的HTML文本,分号结束的表达式等均算一个语句。
复合语句:完整的if/elseif, while, do...while, for, foreach, switch, try...catch等算一个语句。
语句块:{} 括出来的语句块。
最后特别的:declare块本身也算一个语句(按道理declare块也算是复合语句,但此处特意将其独立出来)。

declare(ticks=1); // 低级语句

// A function called on each tick event
function tick_handler()
{
    echo "tick_handler() called<br/>"; // 低级语句
}

register_tick_function('tick_handler'); // 低级语句

$a = 1; // 低级语句

if ($a > 0) {
    $a += 2; // 低级语句
    print($a); // 低级语句
}
function do_tick()
{
    echo "<b style='color:red;'>do_tick_function</b><br>";
}
register_tick_function('do_tick');
declare(ticks = 1)
{
    for($i = 1; $i < 5; $i++)
    {
        echo "<b style='color:blue;'>{$i}</b><br>";
    }
}

include 语句包含并运行指定文件。没找到只会发出一条警告。
require 没找到会发生一个致命的错误

vars.php

$color = 'green';
$fruit = 'apple';

test.php

echo "A $color $fruit";

include 'vars.php';

echo "A $color $fruit";

php 函数
(和js函数基本雷同)

类与对象

class A {
    function foo()
    {
        if(isset($this)) {
            echo '$this is defined' . get_class($this);
            // get_class()返回类名
        } else {
            echo '$this is not defined';
        }
    }
}

$a = new A();
$a -> foo();

继承
PHP不支持多重继承,一个类只能继承一个基类。
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。

class SimpleClass {
    // 成员声明
    public $var = 'a default value';

    // 方法声明
    public function displayVar() {
        echo $this->var;
        echo '<br/>';
    }
}

$simple_class = new SimpleClass();
$simple_class -> displayVar();

class ExtendClass extends SimpleClass {
    // 重写父类方法
    function displayVar()
    {
        echo 'extend class: ';
        parent::displayVar(); // TODO: Change the autogenerated stub
    }
}

$extended = new ExtendClass();
$extended -> displayVar();

属性修饰符:public,protected,private

类常量

// 类常量
class MyClass {
    const CONSTANT = 'constant value';

    // PHP5.3.0之后
    const bar = <<<'EOT'
    BAR
EOT;

    public function showConstant() {
        echo self::CONSTANT.'<br/>';
    }
}

$my_class = new MyClass();
$my_class -> showConstant();
// 直接访问类常量
echo MyClass::CONSTANT;
echo '<br/>';

// PHP5.3.0之后
echo $my_class::CONSTANT;
echo '<br/>';
echo MyClass::bar;

自动加载类
很多开发者写面向对象的应用程序时,对每个类的定义建立一个PHP 源文件。一个很大
的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表。
在软件开发的系统中,不可能把所有的类都写在一个PHP 文件中,当在一个PHP 文件
中需要调用另一个文件中声明的类时,就需要通过include 把这个文件引入。不过有的时候,
在文件众多的项目中,要一一将所需类的文件都include 进来,是一个很让人头疼的事,所以
我们能不能在用到什么类的时候,再把这个类所在的PHP 文件导入呢?这就是我们这里我们
要讲的自动加载类。
在PHP5 中,可以定义一个__autoload()函数,它会在试图使用尚未被定义的类时自动调
用,通过调用此函数,脚本引擎在PHP 出错失败前有了最后一个机会加载所需的类,
__autoload()函数接收的一个参数,就是你想加载的类的类名,所以你做项目时,在组织定义
类的文件名时,需要按照一定的规则,最好以类名为中心,也可以加上统一的前缀或后缀形
成文件名,比如xxx_classname.php、classname_xxx.php 以及就是classname.php 等等。
本例尝试分别从MyClass1.php 和MyClass2.php 文件中加载MyClass1 和MyClass2 类

MyClass1.php

class MyClass1 {
    public function className()
    {
        echo get_class($this);
    }
}

MyClass2.php

class MyClass2 {
    public function className()
    {
        echo get_class($this);
    }
}

demo01.php

// 自动加载类
function __autoload($class_name)
{
    require_once $class_name . '.php';
}

$obj = new MyClass1();
$obj2 = new MyClass2();

$obj->className();
echo '<br/>';
$obj2->className();

PHP类与面向对象的更多相关文章

  1. php入门 数据类型 运算符 语言结构语句 函数 类与面向对象

    php PHP-enabled web pages are treated just like regular HTML pages and you can create and edit them ...

  2. 第四节:详细讲解Java中的类和面向对象思想

    前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...

  3. PHP之旅6 php的类与面向对象

    对于类与面向对象的问题其实刚开始不用非要弄懂原因,直接先这样用,用多了你就发现你会了.所以 学习面向对象就先去做.用的多了你就发现这个就是这样的. 对于类的理解,我自己的理解就是:有一个叫做类的东西里 ...

  4. python 教程 第九章、 类与面向对象

    第九章. 类与面向对象 1)    类 基本类/超类/父类被导出类或子类继承. Inheritance继承 Inheritance is based on attribute lookup in Py ...

  5. Python3 学习第五弹:类与面向对象

    对于面向对象总是要提到,万物皆对象.好似博大精深的感觉. 接下来一起看看python的面向对象的例子 创建一个对象 class Person: type = 'person' def __init__ ...

  6. 从C#到Python —— 4 类及面向对象

    http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...

  7. C++雾中风景1:友元类与面向对象

    因为后续准备入职的公司都希望能转C++,所以最近也是按部就班的开始进行C++的学习.然后这个系列的文章打算探究C++的语言特性,也比较一下不同语言(如Java,Scala,Python,Go)之间的设 ...

  8. 01_JavaSE之OOP--面向对象(类和面向对象的简单认识)

    面向对象(一) 一.面向对象概述 谈到面向对象就不得不谈谈面向过程,面向对象也是由面向过程发展而来. 面向过程思想概述 面向过程,简而言之就是分步骤,过程化的去解决问题,代表语言有:Pascal,C等 ...

  9. 22 python 初学(类,面向对象)

    python: 函数式 + 面向对象 函数式可以做所有的事,是否合适? 面向对象: 一.定义: 函数: def + 函数名(参数) 面向对象: class  -> 名字叫 Bar 类 def   ...

随机推荐

  1. -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable

    在 myEclipse 中 需要配置 解决方法: window --> preferences --> java --> installed JREs 设置 Default VM A ...

  2. c语言检测文件是否存在int __cdecl access(const char *, int);

    最近写代码,遇到很多地方需要判断文件是否存在的.网上的方法也是千奇百怪,“百家争鸣”. fopen方式打开的比较多见,也有其他各种方式判断文件是否存在的,由于其他方法与本文无关,所以不打算提及. 笔者 ...

  3. 咏南WEB开发框架(FOR XE10.1 BERLIN)

    咏南WEB开发框架(FOR XE10.1 BERLIN) 1)支持最新的XE10.1 BERLIN开发WEB程序 2)如同开发VCL WIN32程序一样的速度 3)WEB框架通过咏南中间件和数据库打交 ...

  4. linux上配置网络/安装vsftp服务器

    1 准备用yum方式安装,小红帽linux原版不注册无法适用,只好安装centos系统 2 安装好centos系统注意事项: 硬盘得是IDE 配置好网络必须通,eth0的配置文件设置一下,联网启用 c ...

  5. 数字电路-异同步 复位 线与 oc门

    1.同步电路和异步电路的区别是什么? 异步电路:主要是组合逻辑电路,用于产生地址译码器.FIFO或RAM的读写控制信号脉冲,但它同时也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,通 ...

  6. python 字符串函数

    split函数:将字符串分割成序列 str.split("分隔符") 一般可以这样用 list = [n  for n in str.split],这样可以得到一个新的序列 str ...

  7. UITableViewCell重用的问题

    UITableView中有两种重用Cell的方法: - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (id)dequ ...

  8. 隐藏 input 标签的边框

    css input 如何去掉点击后出现的边框:css文件里加:*:focus { outline: none; } 或 input {outline:none;} 去边框的方法如下 方法1: < ...

  9. View的事件处理流程

    一直对view的事件处理流程迷迷糊糊,今天花了点时间写了个栗子把它弄明白了. 1.view的常用的事件分为:单击事件(onClick).长按事件(onLongClick).触摸事件(onTouch), ...

  10. WinForm动态添加控件及其事件(转)

    出处:http://blog.sina.com.cn/s/blog_60d576800100tf61.html 1        private void PhotoForm_Load(object  ...