Проблема с вызовом метода объекта

otshelnik

Новичок
Проблема с вызовом метода объекта

Народ, помогите с проблемой!
для сортировки массива использую usort:
PHP:
usort($rows, array('self', 'sortByProjectNameAsc'));
вот сам метод:


PHP:
static public function sortByProjectNameAsc($fst, $scd) {
1:  $a = Element_Task::fabric($fst['id']); 		
2:  $b = Element_Task::fabric($scd['id']); 		 		

3:  $pa = $a->getProject(); 		
4:  $pb = $b->getProject(); 		 		

5:  return strcmp($pa->getElementName(), $pb->getElementName());		 		
}
в итоге ошибка: Call to a member function getElementName() on a non-object in 5

перед 5-й строкой пишу
PHP:
var_damp($pa->getElementName()); die();
строка выводится без проблем...

пробывал перед return ставить условие:

PHP:
if (is_object($pa) && is_object($pb)) {		 	
  echo 'Ok';
  return strcmp($pa->getElementName(), $pb->getElementName());		 		
}
в итоге ничего не выводится, и сортировка не применяется...

Подскажите в чем может быть дело, может кто сталкивался с такой аномалией...
 

jonjonson

Охренеть
А типа функция от метода класса отличий не имеет? Даже статичного?
 

otshelnik

Новичок
по разному вызываются... но вызываю то я его (метод) правильно...
вот работающий пример
PHP:
static public function sortProjByName($fst, $scd) 	
{
 		$a = $fst->object->getName();
 		$b = $scd->object->getName(); 	
 		return strcmp($a, $b); 	
}
 

otshelnik

Новичок
правильно, по алфавиту...

-~{}~ 17.11.08 17:00:

jonjonson, тебя смутил вызов usort?
PHP:
usort($rows, array('self', 'sortByAuthorNameAsc'));
так делать можно: http://ru2.php.net/manual/ru/function.usort.php
здесь второй параметр типа callback (http://ru2.php.net/manual/ru/language.pseudo-types.php#language.types.callback)

-~{}~ 17.11.08 18:34:

Ну что никто не подскажет? хотя бы догадки...
 

Gas

может по одной?
догадки чего?
код вида: strcmp($obj1->method(), $obj2->method())
прекрастно работает, ищи у себя баги.
 

AmdY

Пью пиво
Команда форума
меня смущает 'self', не уж то у тебя есть класс self
 

Gas

может по одной?
вот простой говно-пример, приближённый к коду ТС и который работает
PHP:
  class Test
  {

    protected $iCode;

    public function __construct($iCode)
    {
       $this->iCode = $iCode;
    }

    static function f()
    {
      $arr = array(67,66,65);
      usort($arr, array('self', 'sort'));
      return $arr;
    }

    static function sort($s1, $s2)
    {
      $oA = self::fabric($s1);
      $oB = self::fabric($s2);
      return strcmp($oA->getName(), $oB->getName());
    }

    public function getName()
    {
      return chr($this->iCode);
    }

    static function fabric($iCode)
    {
      return new self($iCode);
    }

  }

  print_r(Test::f());
 

yaniks

новичок
> в итоге ошибка: Call to a member function getElementName() > on a non-object in 5

>перед 5-й строкой пишу
>var_damp($pa->getElementName()); die();
>строка выводится без проблем...

а кто сказал что у тебя при первом же сравнении уже будет не обьект ?
просто ради забавы не делай die, и посмотри что будет в списке вывода
 

otshelnik

Новичок
Всем спасибо!
сделал так:
PHP:
if (is_object($pa) && is_object($pb)) 
{ 			
return strcmp($pb->getElementName(), $pa->getElementName()); 		
}
и + исправил свой баг:rolleyes:... объяснять косяк долго, да и не нужно...
главное что он мой ((...
извините что потратил ваше время, просто был панике...
 
Сверху