2

I've seen this used a lot, especially with SimpleXML.

Is this:

$row->unixtime

simply the same as doing this???

$row[unixtime]

What is this called, why/how should it be used?

JSBձոգչ
  • 40,684
  • 18
  • 101
  • 169
mrpatg
  • 10,001
  • 42
  • 110
  • 169

5 Answers5

24

Object Oriented Programming with PHP

$row->unixtime

$row is an object. unixtime is a property of that object.

$row[unixtime] // I hope you meant $row['unixtime'];

$row is an (associate) array. unixtime is a key in that array.

Asking 'What Objects are' is a bit vague.

Getting started with OOP is not a trivial task. It takes a good while to learn the syntax and nuances, some more time to understand the advantages, and years(arguably) to actually use it effectively.

Community
  • 1
  • 1
Mike B
  • 31,886
  • 13
  • 87
  • 111
10

It's totally different.

The first one, $row->unixtime means that you are accessing the public variable $unixtime of the object/instance of class $row. This is Object Oriented Programming.

Example:

class example{
  public $unixtime = 1234567890;
}

$row = new example();
echo $row->unixtime; // echos 1234567890

The second one, is to get the key 'unixtime' of the array $row. This is called Associative Array. Example:

$row = array(
          'unixtime' => 1234567890
       );
echo $row['unixtime']; // echos 1234567890

You can easily convert between objects and arrays by using the (array) and (object) casts. Example:

$row = array(
          'unixtime' => 1234567890
       );
$row = (object)$row;
echo $row->unixtime; // echos 1234567890

Off-topic: I actually missed out the unix epoch time 1234567890 in February.

mauris
  • 42,982
  • 15
  • 99
  • 131
6

No, they're not the same. It's about object oriented programming.

-> indicates accessing an object member. For example:

class Test {
  public $foo;
  public $blah;
}

$test = new Test;
$test->foo = 'testing';

[] is an array access operator, used by true arrays. Objects can also use it if they implement the ArrayAccess interface:

class Test2 implements ArrayAccess {
  private $foo = array();

  public function offsetGet($index) { return $this->foo[$index]; }
  // rest of interface
}

$test2 = new Test2
$test2['foo'] = 'bar';
cletus
  • 616,129
  • 168
  • 910
  • 942
3

To make your answer short and sweet...

$row->unixtime

This is an object

$row[unixtime]

This is an array

Trav L
  • 14,732
  • 6
  • 30
  • 39
1

It's likely another idiom pulled from the C language, which is actually what PHP is written in. Many of PHP's features, syntax, and operators, and even many of PHP's native functions, have their roots in C.

ken
  • 3,650
  • 1
  • 30
  • 43