[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объекты в параметрах функций
romantik2011
Вот решил написать функцию в классе, а в функции, внутри класса, хочу проверить, принадлежит ли той или иной объект какому-то классу.

<?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("Петя");

?>

Код вроде работает, выводит такое:
Цитата

Это чужой!
Петя

Но здесь получается грубо говоря проверка переменной, а не проверка объекта на принадлежность какому-то классу. Как сделать проверку на объект, который исходит от параметра функции и сделать проверку внутри функции?



Спустя 1 минута, 38 секунд (28.07.2011 - 19:30) ADiel написал(а):
http://php.net/manual/ru/function.method-exists.php


function chekObject($obj){
if(method_exists('User', $obj)){
echo "Это наш!<br>";
} else{
echo "Это чужой!<br>";
}
echo $obj;
}

Спустя 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)); // true
var_dump($obj->someMethod($obj)); // true
var_dump($obj->checkObject($obj2)); // false
var_dump($obj->someMethod($obj2)); // Catchable fatal error

Спустя 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)); // (true, true)
var_dump($obj->someMethod($obj)); // true
var_dump($obj->checkObject($obj2)); // (false, false)
var_dump($obj->someMethod($obj2)); // Catchable fatal error

Спустя 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
все верно, я в комментах кода тоже самое написал smile.gif

ЗЫ. Надеюсь, смысл примеров понятен?

Спустя 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));
/*Здесь вы передаёте этот созданный объект в качестве
аргумента функции checkObject, а в этом месте return array($obj instanceof BasicClass, $obj instanceof SomeClass);
вы вызываете массив в котором проверяете 1
объект, тот же, то есть obj
является ли он объектом класса BasicClas и ещё
является ли он объектом класса SomeClass и
если да, то проиходит просто тру или фэлсе
логическое на экран или что?
*/


Спустя 16 минут, 21 секунда (29.07.2011 - 01:01) Invis1ble написал(а):
да, создается массив (это я для наглядности) в котором два булевых значения.
Первое - является ли переданное в метод значение объектом базового класса, второе - является ли объектом наследующего класса.
вот тут подробней
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.