• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Objekt zeiger

supertobs

Mitglied
Hallo,
Ich habe ein kleines Problemchen mit Objekten

Und zwar hab ich 2 Objekte. das eine ist das Objekt "user" welches einen Benutzer darstellt.

Das zweite ist das Objekt "post", welches einen post darstellt.

Nun will ich im Objekt post ein neues Objekt user erstellen. dies versuch ich folgendermaßen:

PHP:
class post{
//Code...

private $user;

public function __construct($ID){
       $post=mysql_query("SELECT * FROM bullentin_message WHERE ID='".$ID."'");
      $post=mysql_fetch_array($post);


      $this->user       = new user($post['sendID']);
}

}

//Code

Was mache ich falsch?

LG
Tobi
 
Was mache ich falsch?
Wahrscheinlich bezieht sich die Frage auf was anderes, aber so nebenbei: Du verletzt eine Regel des guten Software-Desgins. Vermeide konkrete Implementierungen und programmiere gegen eine Schnittstelle - heißt: injiziere das User-Objekt in das Post-Object.

PHP:
<?php
class User {
    private $userId = null;

    public function __construct($id) {
        $userId = intval($id);
    }
}

class Post {
    private $author = null;

    public function __construct() {}

    public function setAuthor(User $author) {
        $this->author = $author;
    }
}

$post = new Post();
$user = new User($UserID);

// inject user object
$post->setAuthor($user);

So erreichst Du lose Koppelungen zwischen Deinen Objekten und vermeidest (bzw. verringerst) Abhängigkeiten.
 
Ohja stimmt, ich hab vergessen die Fehlermeldung zu posten.
Also die Fehlermeldung ist Folgende:
Catchable fatal error: Object of class user could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/friendsweb2.0/site/functions/getUserInformation.php on line 4


@T!PTOP Die lösung is zwar schön, aber da ich den Post aus der Datenbank lade, ist das nur wenig sinnvoll. außerdem ist der Benutzer, der, der den Post gesendet hat, und diesen bekomme ich nur aus der Datenbank
 
@T!PTOP Die lösung is zwar schön, aber da ich den Post aus der Datenbank lade, ist das nur wenig sinnvoll. außerdem ist der Benutzer, der, der den Post gesendet hat, und diesen bekomme ich nur aus der Datenbank
Es spielt keine Rolle woher Du ihn bekommst; wichtig ist, dass ein Domain-Objekt nicht innerhalb von einem anderen Domain-Objekte kreiert wird. Spätestens, wenn Du bei MVC angelangt bist, wirst dass schon noch realisieren :wink:



Kannst Du mal den kompletten Code posten?
 
So hier is der Code:

Klasse user:

PHP:
<?php
class user {
  private $username;
  private $name;
  private $ID;
  private $birthdate;
  private $age;
  private $firstname;
  private $secondname;
  
  public function __construct($id){
    //if(is_int($id)){
      $user=mysql_Query("SELECT * FROM user WHERE ID='".$id."'"); 
      $user=mysql_fetch_object($user);
      
      
      $this->name = $user->name;
      $this->ID = $id;
      $this->name=$user->name;
      $this->birthdate['day']=$user->birthdate_day;
      $this->birthdate['month']=$user->birthdate_month;
      $this->birthdate['year']=$user->birthdate_year;
      
      $namesplit=explode(" ",$user->name);
      
      $this->firstname=$namesplit[0];
      $this->secondname=$nameplit[1];
      
      $timestamp = time();
      $jahr     = date("Y",$timestamp);
      $monat    = date("n",$timestamp);
      $tag      = date("j",$timestamp);
      $jahrealt = $jahr - $this->birthdate['year'];

      if($tag<$this->birthdate['day']) {
      if($monat<=$this->birthdate['month']) {$jahrealt--;}}
      if($tag>=$this->birthdate['day']) {
      if($monat>=$this->birthdate['month']) {}
      if($monat<=$this->birthdate['month']) {$jahrealt--;}}
      $this->age=$jahrealt;    
      
      
      if($user->private_nameVisibleFor=='false'){
      
        $this->name=$this->firstname.' '.$this->secondname[0].'.';
    
    $this->secondname=$this->secondname[0];
        
        } elseif($user->private_nameVisibleFor=='in') {
        $this->name=$this->firstname[0].' '.$this->lastname[0].'.';
        $this->secondname=$this->secondname[0];
        $this->firstname=$this->firstname[0];
    
        }
        $this->username=$user->name;
  
  }
  
  public function getID(){
  
    return $this->ID;
  
  }
  
    public function getName(){
  
    return $this->name;
  
  }
  
  public function out(){
  
  $return='<div class="user-card"><a href="/'.RELATIVE_SYSTEM_PATH.'site/profile/'.$this->ID.'/">';
  $return.='<div class=""><div class="image"><img src="/'.RELATIVE_SYSTEM_PATH.'site/img/phpImages/userImage.php?id='.$this->ID.'"></div><div class="infos"><span class="user">'.$this->username.'</span><span class="info"> Name: '.$this->name.'<br>Alter: '.$this->age.'</span></div></div></a></div>';
  return $return;
  
  }
    
}


Klasse post:
PHP:
<?php

class post{
  private $ID;
  private $user;
  private $type;
  private $typeID;
  private $visibility;
  private $message;
  private $time;
  private $wallID;
  private $priority;
  

  public function __construct($ID){
    $post=mysql_query("SELECT * FROM bullentin_message WHERE ID='".$ID."'");
    if(mysql_num_rows($post)!=0){
      $post=mysql_fetch_array($post);
      $this->ID         = $ID;
      $this->user       = new user($post['sendID']);
      $this->message    = $post['message'];
      $this->visibility = $post['visibleFor'];
      $this->time       = $post['time'];
      $this->typeID     = $post['wallID'];
      $this->type       = $post['type'];
      $this->priority   = $post['priority'];
      
    }
  }
  
  public function isVisibleForUser(){
    $isVisible = isVisible($visibility,$this->user);
    return $isVisible;
  }
  
  public function out($width='none'){
      $senderInfo = getUserInformation($this->user);
      $typeIdInfo = getUserInformation($this->typeID);
      
      if($this->priority=='top'){
      $style="top";
       
      } else {
      $style='';
      }
    
     switch($this->visibility){
        case 'me': $visibility='eye-close';
        break;
        case 'friend': $visibility='user';
        break;
        case 'all':$visibility='globe';
        break;
        case '':$visibility='globe';
        break;
        default: $visibility = 'remove';
      }
      if($width!='none'){
        $styleWidth='style="width:'.$width.'px;"';
      
      } else {
        $styleWidth;
      }
      $out.='
      <div class="indexNews box'.$boxID.' '.$style.'" '.$styleWidth.'>';
      if($this->typeID==USER_ID OR $this->sender==USER_ID){
      /*$out.='
      <a href="/'.RELATIVE_SYSTEM_PATH.'site/post/'.$postId.'/remove/" class="close fw-remove">&times;</a>';*/
      $out.='
      
          <div class="btn-group" style="position:absolute; right:20px; top:20px;">
    <a class="btn dropdown-toggle"  data-toggle="dropdown" href="#">
    
    <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" style="left:auto; right:0px;">
    <li><a href="/'.RELATIVE_SYSTEM_PATH.'site/post/'.$this->ID.'/change-visibility/all/"><i class="icon-globe"></i> für alle sichtbar</a></li>
    <li><a href="/'.RELATIVE_SYSTEM_PATH.'site/post/'.$this->ID.'/change-visibility/friend/"><i class="icon-user"></i> nur für Freunde sichtbar</a></li>
    <li><a href="/'.RELATIVE_SYSTEM_PATH.'site/post/'.$this->ID.'/change-visibility/me/"><i class="icon-eye-close"></i> nur für mich sichtbar</a></li>
    <li class="divider"></li>
    <li><a href="/'.RELATIVE_SYSTEM_PATH.'site/post/'.$this->ID.'/remove/"><i class="icon-trash"></i> Löschen</a></li>
    </ul>
    </div>';
      }
      $out.='
       
          
            <div class="right"><img src="/'.RELATIVE_SYSTEM_PATH.'site/img/phpImages/userImage.php?id='.$this->user->getID().'"></div>
           <div class="left"> <a class="user" href="/'.RELATIVE_SYSTEM_PATH.'site/profile/'.$senderInfo['ID'].'/">'.$this->user->getName().'</a>
        
        <div class="message">'.stripcslashes(bbcChat($this->message)).'</div>
        <div class="foot">';
  $out.='<div class="fw-clearfix"> <div class="time">'.checkTimeDistance($this->time );
  
  /*if($sender!=$this->typeID){
    $out.=' auf '.$typeIdInfo['username'].'s Pinnwand';
    
    }*/   
           
  $out.= '</div><div  class="likeBox">';
  $out.= generateLikeButton($this->ID,'wall',$this->ID,'like');
  $out.= '</div><div class="visibility"><i class="icon-'.$visibility.'"></i></div></div><div id="wallComments'.$this->ID.'">';
  $out.= generateCommentBox('wall',$this->ID);
  $out.= '</div>';  
      
      $out.='
        </div></div>
      </div>';

  
  return $out;
  
  }
  
  

}

Der Fehler tritt in der fetten Zeile auf.

LG
Tobi
 
Zurück
Oben