PHP类与面向对象
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类与面向对象的更多相关文章
- php入门 数据类型 运算符 语言结构语句 函数 类与面向对象
php PHP-enabled web pages are treated just like regular HTML pages and you can create and edit them ...
- 第四节:详细讲解Java中的类和面向对象思想
前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...
- PHP之旅6 php的类与面向对象
对于类与面向对象的问题其实刚开始不用非要弄懂原因,直接先这样用,用多了你就发现你会了.所以 学习面向对象就先去做.用的多了你就发现这个就是这样的. 对于类的理解,我自己的理解就是:有一个叫做类的东西里 ...
- python 教程 第九章、 类与面向对象
第九章. 类与面向对象 1) 类 基本类/超类/父类被导出类或子类继承. Inheritance继承 Inheritance is based on attribute lookup in Py ...
- Python3 学习第五弹:类与面向对象
对于面向对象总是要提到,万物皆对象.好似博大精深的感觉. 接下来一起看看python的面向对象的例子 创建一个对象 class Person: type = 'person' def __init__ ...
- 从C#到Python —— 4 类及面向对象
http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...
- C++雾中风景1:友元类与面向对象
因为后续准备入职的公司都希望能转C++,所以最近也是按部就班的开始进行C++的学习.然后这个系列的文章打算探究C++的语言特性,也比较一下不同语言(如Java,Scala,Python,Go)之间的设 ...
- 01_JavaSE之OOP--面向对象(类和面向对象的简单认识)
面向对象(一) 一.面向对象概述 谈到面向对象就不得不谈谈面向过程,面向对象也是由面向过程发展而来. 面向过程思想概述 面向过程,简而言之就是分步骤,过程化的去解决问题,代表语言有:Pascal,C等 ...
- 22 python 初学(类,面向对象)
python: 函数式 + 面向对象 函数式可以做所有的事,是否合适? 面向对象: 一.定义: 函数: def + 函数名(参数) 面向对象: class -> 名字叫 Bar 类 def ...
随机推荐
- setAttribute()和getAttibute(),getParameter()
request.setAttribute("key",value)方法给主键设置一个值, request.getAttribute("key")方法从上述设置的 ...
- 2d,3d中旋转推导
二维绕原点旋转,其实点为(x,y),旋转角度为黄色标注的角度. 推导过程如下: x' = r cos(al+be); y' = r sin(al+be);x '= rcosalcosbe-rsinal ...
- Spring 4 官方文档学习(十一)Web MVC 框架之约定优于配置
当返回一个ModelAndView时,可以使用其addObject(Object obj)方法,此时的约定是: An x.y.User instance added will have the nam ...
- 网站加载css/js/img等静态文件失败
网站加载css/js/img等静态文件失败,报网站http服务器内部500错误.而服务器中静态文件存在且权限正常. 从浏览器中直接访问文件,出来乱码.这种问题原因在于iis中该网站mime配置报错,不 ...
- python 高阶函数与装饰器
高阶函数定义1.函数接收的参数是一个函数名2.函数的返回值是一个函数名以上两者满足任意一个,就是高阶函数装饰器定义本质就是函数,功能是为其他函数添加新功能 装饰器的原则 1.不修改被装饰函数的源代码( ...
- C#签名 NX90
1.在VS中添加D:\Siemens\NX90\ \NXSigningResource.res文件,右击文件属性,将资源变为 嵌入式资源,即生成方式 2.编译生成exe文件或者dll文件,例如:xxx ...
- C#压缩文件 不压缩路径
我想把 E:\\AA\BB\11.txt 压缩后存入 E:\\AA1\BB1\11.rar 但是当我解压( E:\\AA1\BB1\11.rar)的时候,发现:11.txt 不是在 E:\\AA1\B ...
- log4j日志
1.引入的包 2.配置文件 该文件放到src路径下, log4j.rootLogger=DEBUG,CONSOLE,A1,im #DEBUG,CONSOLE,FILE,ROLLING_FILE,MAI ...
- 给AOP的after函数使用原函数局部变量
引:AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 这里我们可以理解为在执行某函数时,要先执 ...
- 【笔记】DOM探索基础篇(二)
# 浏览器的渲染(HTML解析) ——参考: <前端必读:浏览器内部工作原理>http://kb.cnblogs.com/page/129756/ <谈谈DOMContentLoad ...