php中的num_row是个变量还是个函数?

num_row在过程写法的时候是mysqli_num_rows(),但是在对象写法的时候却是$rs->num_rows,
本以为自己错了,后改成$rs->num_rows(),反而报undefined method mysqli_result::num_rows()的错误。
在查看mysqli.php文件中,对于num_rows的定义是:
/**
* Return the number of rows in statements result set
* @link http://www.php.net/manual/en/mysqli-stmt.num-rows.php
* @param stmt mysqli_stmt
* @return int An integer representing the number of rows in result set.
*/
public function num_rows (mysqli_stmt $stmt) {}
说明他的确是一个函数,为什么用的时候却不要() ?
拜大神赐教!

看你写$rs->num_rows()就知道你没理解面向对象。面向对象中的方法也就是面向过程中说的函数,是实现操作的,后面不可能加()。$rs->num_rows这个是指调用$rs对象中的num_rows属性,这个不是方法。
看你的表述,你没有分清面向对象中对象的属性和方法这个概念。熟悉面向对象的人是不会在方法后面加()的,而且没有人说面向过程中的函数名要和面向对象中的方法名同名,这个你有点想当然了。
PS:PHP的下个版本应该就是全面改为面向对象的,建议你从此专心使用面向对象的模式来学习PHP。追问

是你没看懂我问什么

追答

看懂你问什么了,所以跟你强调区分面向过程与面向对象。面向对象中的函数调用时是作为对象的一个方法,也是不加()的。对象中的属性和方法都是通过->表示,都不带()。
明白?你把public function这个在对象中声明public方法的函数当成面向过程中的函数了,只要你理解了面向对象,就不会加()。因为面向对象中没有所谓的函数这一说,只有属性和方法。属性就是面向过程中的变量,而方法就是面向对象中的函数。
你不能同时按两个模式来思考问题,虽然现在php代码是混用面向对象与面向过程的。
你刻意强调的public function num_rows (mysqli_stmt $stmt) {}中的public已经说明了这是某个对象的方法,public声明了其作用范围,在面向过程的函数中是不会有public声明存在的。如果你理解了面向对象(OOP),你只要看到public的瞬间就不会把它当成面向过程的函数,而是作为特定对象的成员方法。

追问

我理解了你的意思,你找几个别的方法试试吧,不加()是不行的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-28
这情况 num_rows 为数组。追问

看这句 public function num_rows (mysqli_stmt $stmt) {}

追答

这里这个num_rows 是函数 同个页面的吗

-> 是对象成员访问符号

$rs->num_rows 说白了就是把 变量RS 的数组赋值给 num_rows数组

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网