首先你这逻辑就有问题,子类不继承父类
创新互联主要从事网站制作、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务鹿寨,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
那么他就是一个单独的
基类
,跟父类没有关系,如果想调用你说的父类里方法
可以在你新的这个类里使用关键词
new
实例化这个父类对象
再去调用里面的方法,当然
三个等级
你只能使用父类里的公共方法
公共属性,或者你想要调用私有private
和受保护
protected
的方法时
需要在该类下面使用
魔术方法
__get();
假设你系统里数据库请求的函数是 pdo_query (你自己根据情况调整),表名是tblcate
另外,这段代码使用到了array_column函数,该函数从php5.5起才有,如果你的版本较低,要找一个兼容函数放到函数库里(官方文档评论中就有实现)
以下是代码文本 如果复制过去出现T_VARIABLE错误,就是代码中字符被系统混掉了,你要重新手打一下
//这里根据你的意思,应该是选出没有下级的节点,如果需要全部或其它的,你根据情况修改,不影响后面的其它操作
$selectedNodes = pdo_query("select * from tblcate where pid not in(select pid from tblcate)");
//选出全部节点
$allNodes = pdo_query("select * from tblcate ");
//将节点数据使用id索引,方便获取
$allNodes = array_column($allNodes, NULL, 'id');
foreach($selectedNodes as $node){
$tree = getParentNode($node['pid']);
//这里的$tree 是上级名称拼起来的,不包含本级名称,如要包含,在后面附加上就行了
$node['tree'] = implode(',',$tree);
}
unset($node);
var_export($selectedNodes );
function getParentNode($pid){
global $allNodes;
$pnodes=[];
if($pid 0 isset($allNodes[$pid])){
$pNode = $allNodes[$pid];
$pnodes[]= $pNode['name'];
$rnodes = getParentNode($pNode['pid']);
if(!empty($rnodes)){
$pnodes = array_merge($pnodes,$rnodes);
}
}
return $pnodes;
}
这种类型的数据,一般数据库中,一张表会有存在两个字段,一个是它本身id,另一个是它的父级parent_id。
既然要找到它的祖父级,sql语句这样写:
$id = empty($_POST['id'])?'':$_POST['id'];
$parent_id = get_parent_id($id);
$p_p_id = get_parent_id($parent_id);
function get_parent_id($id){
$sql = "select parent_id from ecs_table1 where id=" . $id;
return($GLOBALS['db']-getone($sql ));
}
递归,就是根据现有的id,重复取。
上面get_parent_id只是获取父id,当然,你可以写一个直接获取祖父id的函数。
不过,现在大部分php网站,都只会有获取父类的函数,想discuz,ecshop等。获取祖父id,就是不断的获取该id的父id。
你的数据库的字段,和sql查询的字段怎么对于不起来
比如两个sql语句,都有数据库没有的字段
$sql="SELECT * FROM `imdept` where did='$did' LIMIT 1";
$sql_imdept="SELECT pdid,name FROM `imdept`";
did和pdid都没有
?php
class A{ public $a1='a1'; protected $a2='a2'; function test(){ echo "hello!hr/"; } }
class B extends A{//若A类和B类不在同一文件中 请包含后(include)再操作
public $a1='b1'; function test2(){ $this-test(); parent::test();//子类调用父类方法 }
function test()
{ echo $this-a1.','; echo $this-a2.','; echo "b2_test_hellohr/"; } }
$a = new B(); $a-test();//b1,a2,b2_test_hello
$a-test2();//b1,a2,b2_test_hello//hello!
?
方法的调用:$this-方法名();如果子类中有该方法则调用的是子类中的方法,若没有则是调用父类中的
parent::则始终调用的是父类中的方法。
变量的调用:$this-变量名;如果子类中有该变量则调用的是子类中的,若没有则调用的是父类中的
可以给函数传引用,如
//传引用
function myfunc($c){
$c=$arrray;
}
这样当你调用 myfunc($obj-a-b-c) 之后, $obj-a-b-c就已经等于$arrray了。