检查对象A是否可以访问对象D.

时间:2016-07-19 00:12:40

标签: php function class object

我有一个创建Object的代码。假设我们可以创建一个Object A,并且该对象具有R1或R2方向或对下一个Object的权限,我们将其命名为Object B,因此为了从对象A访问对象B R1或R2必须为1(或TRUE) )

如何实现一个检查对象A是否可以访问对象D的函数。 对于对象A,它需要至少具有对对象带的R1或R2访问权限,其中对象B需要具有对对象C的R1或R2访问权限,其中对象D需要至少具有对对象D的R1或R2访问权。 p>

<?php

class MyObject {
    function directionsRn($R1, $R2, $objSource, $objDest) {
        if ($R1 == 1) {
            echo("$objSource can access $objDest via R1 <br>");
        } else if ($R1 == 0) {
            echo("SORRY, but $objSource CANNOT access $objDest via R1 <br>");
        }  

        if ($R2 == 1) {
            echo("$objSource can access $objDest via R2<br>");
        }  else if ($R2 == 0) {
            echo("SORRY, but $objSource CANNOT access $objDest via R2 <br>");
        }
    }
}

$myObject_array[0] = new MyObject();
$myObject_array[1] = new MyObject();
$myObject_array[2] = new MyObject();

$myObject_array[0]->directionsRn(0, 1, 'A', 'B');
$myObject_array[1]->directionsRn(1, 0, 'D', 'B');
$myObject_array[2]->directionsRn(1, 0, 'C', 'D');

print_r($myObject_array);

1 个答案:

答案 0 :(得分:1)

你拥有的是graph,你的对象是节点(A,B等),对象之间的权限是边。

任何两个节点之间的连接都可以使用bread first search来解决,您可以在其中尝试从已经访问了一个边缘的节点集中访问新节点。重要的一点是通过将已标记的元素标记为已经看到(使用布尔数组)

来忽略已经访问过的元素

您还可以找到用于检查两个节点here

的连接的不同方法