Вот решил написать функцию в классе, а в функции, внутри класса, хочу проверить, принадлежит ли той или иной объект какому-то классу.
<?php
class A{
public function f(){
echo 'Лето-2011!';
}
}
class B extends A{
function chekObject($obj){
if($obj instanceof User){
echo "Это наш!<br>";
} else{ echo "Это чужой!<br>";}
echo $obj;
}
}
$obj = new B();
$obj->chekObject("Петя");
?>
Код вроде работает, выводит такое:Но здесь получается грубо говоря проверка переменной, а не проверка объекта на принадлежность какому-то классу. Как сделать проверку на объект, который исходит от параметра функции и сделать проверку внутри функции?
Спустя 6 минут, 38 секунд (28.07.2011 - 19:36) Invis1ble написал(а):
romantik2011
Цитата |
Но здесь получается грубо говоря проверка переменной, а не проверка объекта на принадлежность какому-то классу |
Почему? Все нормально у тебя. Если у тебя метод должен принимать только объект определенного типа, то лучше сделать так:
function chekObject(User $obj){
Спустя 3 минуты, 53 секунды (28.07.2011 - 19:40) romantik2011 написал(а):
Вот так тоже что-то не пашет.
<?php
class A{
public function f(){
echo 'Лето-2011!';
}
}
class B extends A{
function chekObject(B $obj){
if($obj instanceof B){
echo "Это наш!<br>";
} else{ echo "Это чужой!<br>";}
echo $obj;
}
}
$obj = new B();
$obj->chekObject("Петя");
?>
Цитата |
Catchable fatal error: Argument 1 passed to B::chekObject() must be an instance of B, string given, called in C:\www\htdocs\test.ru\ www\index.php on line 19 and defined in C:\www\htdocs\test.ru\www\index.php on line 9 |
Спустя 6 минут, 34 секунды (28.07.2011 - 19:47) Invis1ble написал(а):
class A {}
class SomeClass {
public function checkObject($obj) {
return $obj instanceof SomeClass;
}
public function someMethod(SomeClass $obj) {
return true;
}
}
$obj = new SomeClass;
$obj2 = new A;
var_dump($obj->checkObject($obj));
var_dump($obj->someMethod($obj));
var_dump($obj->checkObject($obj2));
var_dump($obj->someMethod($obj2));
Спустя 11 минут, 21 секунда (28.07.2011 - 19:58) Invis1ble написал(а):
Расширенный пример:
class A {}
class BasicClass {}
class SomeClass extends BasicClass {
public function checkObject($obj) {
return array($obj instanceof BasicClass, $obj instanceof SomeClass);
}
public function someMethod(BasicClass $obj) {
return true;
}
}
$obj = new SomeClass;
$obj2 = new A;
var_dump($obj->checkObject($obj));
var_dump($obj->someMethod($obj));
var_dump($obj->checkObject($obj2));
var_dump($obj->someMethod($obj2));
Спустя 2 часа, 22 минуты, 41 секунда (28.07.2011 - 22:21) romantik2011 написал(а):
Запустил расширенный пример, выдало такое:
array(2) { [0]=> bool(true) [1]=> bool(true) }
bool(true) array(2) { [0]=> bool(false) [1]=> bool(false) }
Catchable fatal error: Argument 1 passed to
SomeClass::someMethod() must be an
instance of BasicClass, instance of A given, called in
C:\www\htdocs\test.ru\
www\index.php on line 22 and defined in
C:\www\htdocs\test.ru\www\index.php on line 11
Спустя 51 секунда (28.07.2011 - 22:22) Invis1ble написал(а):
romantik2011все верно, я в комментах кода тоже самое написал

ЗЫ. Надеюсь, смысл примеров понятен?
Спустя 2 часа, 23 минуты, 26 секунд (29.07.2011 - 00:45) romantik2011 написал(а):
Хотел уточнить по коду.
Вот здесь:
public function checkObject($obj) {
return array($obj instanceof BasicClass, $obj instanceof SomeClass);
}
............................
.............................
$obj = new SomeClass;
var_dump($obj->checkObject($obj));
Спустя 16 минут, 21 секунда (29.07.2011 - 01:01) Invis1ble написал(а):
да, создается массив (это я для наглядности) в котором два булевых значения.
Первое - является ли переданное в метод значение объектом базового класса, второе - является ли объектом наследующего класса.
вот
тут подробней