php入门教程之对象详解(1/5)
类的声明:
代码如下 | 复制代码 |
<?php //...
|
成员属性:
在类中直接声明的变量称为成员属性/变量.其类型可以为php中的标量类型和复合类型,使用资源类型和空类型是无效的.
此外,成员属性的声明时,必须要有关键字来修饰:有特定意义的关键字:public,protected,private ;不需要特定意义:var.声明成员属性时,没有必要赋初始值.
成员常量:
以const常量修饰,例如:const PI = 3.1415926;
常量的输出不需要实例化,直接由类名+常量名调用即可,格式为: 类名::常量名
ps. 特殊的访问方法:--------"$this" 和 "::"
1) $"this" 存在于每个成员方法当中,它是一个特殊的对象以用方法.成员方法属于那个对象,$this应用就代表那个对象,其作用就是专门完成对象内部成员之间的访问.
2) "::"成为作用域操作符,使用这个操作符可以在不创建对象的情况下调用类中的常量,变量和方法. 其语法格式如下:
关键字::变量名/常量名/方法名
关键字:parent,可以调用父类成员中的成员变量,成员方法和常量;
self,可以调用当前类中的静态成员和常量;
类名,可以调用类中的常量,变量和方法;
成员方法:
在类中声明的函数成为成员方法,在一个类中可以声明多个函数,即对象可以拥有多个成员方法.成员方法的声明和函数的声明相同,唯一特殊之处就是成员方法可以有关键字对它进行修饰,从而控制其访问权限.
类的实例化
创建对象:
$变量名 = new 类名称([参数]); //类的实例化.
访问类成员:
$变量名 -> 成员属性 = 值;
最近在使用php的mongo 扩展进行数据统计计算,其中有一个时间戳字段,由于精确到了毫秒,长度有13位,但由于开始的时候是以字符串的形式存储:
代码如下 | 复制代码 |
|
后来改成数字格式:
代码如下 | 复制代码 |
{ "_id" : ObjectId("504eea97e4b023cf38e34039"), "in_ts" : NumberLong("1347349143699"), "log" : { "guid" : "4D1F3079-7507-F4B0-E7AF-5432D5D8229D", "p" : "View_Prop_YepPage_Zheng", "cid" : "11", "url" : "http://shanghai.haozu.com/rental/broker/n/10481780", "rfpn" : "Listing_V2_IndexPage_All", "site" : "haozu", "agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)", "stamp" : NumberLong("1347349162159"), "cip" : "116.226.70.44", "referer" : "http://shanghai.haozu.com/shop/1464934/", "cstamp" : "1347349323125", "sessid" : "FA798056-F9E7-F961-41E0-CC95C850FA47", "uguid" : "C00FF55B-3D3D-4B31-4318-12345B0DBE64", "pn" : "View_Prop_YepPage_Zheng", "cstparam" : { "proId" : NumberLong(10481780), "brokerId" : "326792", "tradeType" : "2", "userType" : "0", "channel" : "site", "entry" : "1", "COMMID" : "1666" } }, "out_ts" : NumberLong("1347349466083"), "rule" : 0, "status" : "ok", "txid" : 0 }为字符串时,使用下面的查询是正常的 $query = array ('log.stamp' => array ('$gte' => ‘1347346800000’, '$lt' => ‘1347350400000’)); |
但是改为数字后,使用下面的查询,死活没有结果,但是直接在mongo客户端直接查询是有结果的:
代码如下 | 复制代码 |
db.haozu_success.find({'log.stamp':{$gte:1347346800000,$lt:1347350400000}}) |
php手册上也是这么个用法:
代码如下 | 复制代码 |
$query = array ('log.stamp' => array ('$gte' => 1347346800000, '$lt' => 1347350400000)); |
花了好大一会找原因,开始时怀疑是php扩展的bug导致,经过一番思考。突然想到可能是类型问题导致,发现手册上有Types 介绍,所以正确的用法如下:
代码如下 | 复制代码 |
$query = array ('log.stamp' => array ('$gte' => new MongoInt64($time_range['start']), '$lt' => new MongoInt64($time_range['end']))); |
另外,在使用mapreduce进行数据统计时,为了防止cursor出现超时异常,还需要设置一下超时时间
代码如下 | 复制代码 |
$map = new MongoCode ( ' function(){ var prop_id=this.log.cstparam.proId; var key=this.log.site+prop_id emit(key,{"channel":this.log.site,"prop_id":prop_id,"count":1}); } ' ); $reduce = new MongoCode ( ' function(key,emits){ var total=0; for(var i in emits){ total+=emits[i].count; } return {"channel":emits[0].channel,"prop_id":eval(emits[0].prop_id),"count":total}; } ' ); $this->mongo_db->command ( array ('mapreduce' => $collection_name, 'map' => $map, 'reduce' => $reduce, 'out' => $tmp_result, 'query' => $query),array('timeout'=>self::MONGO_CURSOR_TIMEOUT) ); |
平时用$_post[''],$_get['']获取表单中参数时会出现Notice: Undefined index: --------;
服务器配置修改
修改php.ini配置文件,
代码如下 | 复制代码 |
error_reporting = E_ALL & ~E_NOTICE |
程序判断
代码如下 | 复制代码 |
function _get($str){ |
还有一种方法就是在php把错误关闭了代码
代码如下 | 复制代码 |
error_reporting(E_ALL ^ E_NOTICE); |
用isset方法
代码如下 | 复制代码 |
$var = isset($_GET['a'])?$_GET['a']:''; |
//foreach
$tar = array (
1 => '东',
2 => '西',
3 => '南',
4 => '北',
5 => '东南',
6 => '西南',
7 => '东北',
8 => '西北',
9 => '南北',
10 => '东西',
);
代码如下 | 复制代码 |
$TM = '西'; |
//西-2
//for
代码如下 | 复制代码 |
echo '<br />'; |
//西-2
总结:foreach与for结果是完全相同的,但在效率上foreach要胜与for,首页for需要知道数组长度再用$i++来操作,页foreach不需要知道数组长度可自动检测并输入key,和value。
在 PHP 中,提供了超过 700 个内建的函数。 PHP 的函数分为用户自定义函数和系统内置函数。内置函数可以直接使用,用户自定义函数需要使用关键字 function 来定义。自定义函数
函数(function),可以看着是为实现某个功能的独立的程序语句集合。我们将某个功能写成一个函数后,就可以在需要的地方方便的使用它。合理的使用函数,可以让我们的PHP程序更加简洁易读,更加科学。
语法
代码如下 | 复制代码 |
function function_name(arg1,arg2,……) |
创建 PHP 函数
函数是一种可以在任何被需要的时候执行的代码块。
创建 PHP 函数:
所有的函数都使用关键词 "function()" 来开始
命名函数 - 函数的名称应该提示出它的功能。函数名称以字母或下划线开头。
添加 "{" - 开口的花括号之后的部分是函数的代码。
插入函数代码
添加一个 "}" - 函数通过关闭花括号来结束。
函数的参数
参数的功能是传递信息到函数。
例子
现在,我们要在 PHP 脚本中使用这个函数了:
代码如下 | 复制代码 |
<html> <?php echo "Hello world!<br />"; </body> Hello world! |
例子:
代码如下 | 复制代码 |
<?php <?php |
相关文章
- 这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 这篇文章算是超级入门级别的了,我们下面来给各位介绍在photoshop画斜线/直线/虚线的教程了,希望下面这篇文章给你入门来帮助。 PS怎么画斜线 选择铅笔工具,或者画笔...2016-09-14
- 这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- 这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
- 这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
如何在Spring WebFlux的任何地方获取Request对象
这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26牛叉的Jquery――Jquery与DOM对象的互相转换及DOM的三种操作
只有jQuery对象才能调用jQuery类库的各种函数,同样有些dom对象的属性和方法在jQuery上也是无法调用的,不过基本上jQuery类库提供的函数包含了所有的dom操作。这就需要我们知道如何将jQuery对象和DOM的相互转换的方法。1...2015-10-30- js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
- 这篇文章主要介绍了javascript self对象使用详解的相关资料,需要的朋友可以参考下...2016-10-20
- 本文给大家介绍如何替换json对象中的key,通过实例代码给大家介绍key的替换方法,代码也很简单,需要的朋友参考下吧...2021-06-02
- 这篇文章主要介绍了详解Javascript中的Object对象,需要的朋友可以参考下...2016-03-01
- 这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-12-02
- 这篇文章主要介绍了C#线程入门教程之单线程介绍,本文讲解了什么是进程、什么是线程、什么是多线程等内容,并给出了一个单线程代码示例,需要的朋友可以参考下...2020-06-25
- 在web页面中,图片居左,内容居右排列,是非常常见的效果,它也就是媒体对象,它是一种抽象的样式,可以用来构建不同类型的组件。本文给大家介绍Bootstrap媒体对象的实现,感兴趣的朋友一起学习吧...2016-05-04
ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD
vbs调用插件报:ActiveX部件不能创建对象,代码:800A01AD,一般是因为病毒导致dll文件丢失或者64系统问题导致,需要的朋友可以参考下...2020-06-30- 这篇文章主要为大家介绍了JavaScript事件对象,了解JavaScript事件...2016-01-26
- 这篇文章主要介绍了Javascript对象,特别为大家分享了对象题目的一个坑,提供了解题思路,感兴趣的小伙伴们可以参考一下...2015-12-24
- 这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
- 下面小编就为大家带来一篇javascript创建对象的几种模式介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考...2016-05-09