访问类中的属性

What I have is a product class, you can get a product via its id or its product nr. So I have created 2 constructors. The class is retrieving the product via the database and mapping the result to the class variables.

class Partnumber extends CI_Model
{
    private $partNr;
    private $description;
    private $type;

    public function __construct() {
    }

    public static function withId( $id ) {
        $instance = new self();
        $instance->loadByID( $id );
        return $instance;
    }

    public static function withNr($partnumber) {
        $instance = new self();
        $instance->getIdFromPartnumber($partnumber);
        return $instance;
    }

    protected function loadByID( $id ) {
        $instance = new self();
        $instance->getPartnumberFromId($id);
        return $instance;
    }

    private function getIdFromPartnumber($partnumber){
        $this->db->select("*");
        $this->db->from('part_list');
        $this->db->where('part_number', $partnumber);
        $query = $this->db->get();

        return $query->result_object();
    }

    //get the partnumber from an part id
    private function getPartnumberFromId($partId){
        $this->db->select("*");
        $this->db->from('part_list');
        $this->db->where('id', $partId);
        $query = $this->db->get();

        $this->mapToObject($query->result());
    }

    private function mapToObject($result){
        $this->partNr = $result[0]->Part_number;
        $this->description = $result[0]->Description;
        $this->type = $result[0]->Type;
    }

    public function toJson(){
        return json_encode($this->partNr);
    }
}

The mapping works, (I know, I have to catch the errors). But all the values are null when I calling the toJson method.

I call it like this:

class TestController extends MX_Controller{
    public function __construct(){
        parent::__construct();
        $this->load->model('Partnumber');
    }

    public function loadPage() {
           $p = Partnumber::withId(1);
           echo $p->toJson();

    }

}

And yes, I know for sure that data is coming back, because I can print all the items in the mapping method. But why is the data gone when I acces it via toJson?

Your method withId calls loadByID which creates a new instance of your model. It does not load the data into the model that was created in withId which is returned