Jacob
Jacob

Reputation: 2071

Get line and file where object is created in PHP

Is it possible to get the line and file where a object is created? For example.

I know the print PHP error outputs where a error occurred and at which line. Is it possible to use that mechanism?

Sending the file to the object is easy. I can just use basename(__FILE__) as an argument. But I would prefer if the object arguments can remain empty. Like this:

Foo.php

<?php

  class Foo {

    public $line = null;

    public function __construct(){

      $this->line = where_object_is_assigned

    }

  }

?>

Index.php

<?php

  $object = new Foo();
  echo $object->line // Output Index.php line 3

?>

Is there a way for the object to access this data without sending it?

Thanks in advance

Upvotes: 2

Views: 615

Answers (3)

isnisn
isnisn

Reputation: 254

This will output on which line-number the object is created

Class

  class Foo {

    public $line = NULL;

    public function __construct($line){

      $this->line = $line;

    }

  }

Index.php

  <?php
  $object = new Foo(__LINE__); //Will output 1
  echo $object->line;

Upvotes: 1

Jacob
Jacob

Reputation: 2071

I solved it by using the function debug_backtrace();

<?php

  class Foo {

    public $line = null;

    public function __construct(){
      $bt = debug_backtrace();
      $caller = array_shift($bt); // Get first array

      $this->line = $caller["line"];

    }

  }

?>

Index.php

<?php

  $object = new Foo();
  echo $object->line // Output: 3

?>

The function must be used in __construct() else it won't work.

Read more here: http://php.net/manual/en/function.debug-backtrace.php

Upvotes: 1

Narendrasingh Sisodia
Narendrasingh Sisodia

Reputation: 21422

PHP provides a large number of predefined constants to any script which it runs. Within this you can simply find the predefined constant named as LINE

__LINE__ The current line number of the file.

So you need to simply use the predefined constant within your code like as

<?php

  class Foo {

    public $line = __LINE__;

  }

  $object = new Foo();
  echo $object->line;

?>

Upvotes: 0

Related Questions