• 14
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

PHP: Static and non Static functions and Objects

What's the difference between these object callings?

Non Static:

$var = new Object;
$var->function();

Static:

$var = User::function();

And also inside a class why should I use the static property for functions?

example:

static public function doSomething(){
    ...code...
}
    • -1 It appears to me that your last few question were about basic language features. I suggest you read up on the PHP manual or any book first. Repeatedly asking for basic syntax explanations is inexpedient.
    • @mario. A little harsh. Maybe cirk did read the manual and didn't quite grasp the concept. Seems fair to ask fellow programmers for some input.
      • 1
    • @Ben. Maybe too harsh. But I didn't want to downvote without comment or just an RTFM link. And my guess is that he actually did read about it somewhere, but asked for "a second opinion" here. Which would be more ok, if only he had said so.

Static functions, by definition, cannot and do not depend on any instance properties of the class. That is, they do not require an instance of the class to execute (and so can be executed as you've shown without first creating an instance). In some sense, this means that the function doesn't (and will never need to) depend on members or methods (public or private) of the class.

  • 41
Reply Report
    • What is the point of placing static functions inside a class instead of in, say, a separate functions.php file?
    • @billmalarky It's not essential but it at least helps you organize your functions into a file where they are relevant. To me, it's easier and more logical to have a function such as User::someFunction(); rather than Function::someUserFunction; and certainly better than someFunction();

Difference is in the variable scope. Imagine you have:

class Student{
    public $age;
    static $generation = 2006;

   public function readPublic(){
       return $this->age;  
   }

   public static function readStatic(){
       return $this->age;         // case 1
       return $student1->age;    // case 2 
       return self::$generation;    // case 3 

   }
}

$student1 = new Student();
Student::readStatic();
  1. You static function cannot know what is $this because it is static. If there could be a $this, it would have belonged to $student1 and not Student.

  2. It also doesn't know what is $student1.

  3. It does work for case 3 because it is a static variable that belongs to the class, unlike previous 2, which belong to objects that have to be instantiated.

  • 10
Reply Report

Questions regarding STATIC functions keep coming back.

Static functions, by definition, cannot and do not depend on any instance properties of the class. That is, they do not require an instance of the class to execute (and so can be executed. In some sense, this means that the function doesn't (and will never need to) depend on members or methods (public or private) of the class.

class Example {

    // property declaration
    public $value = "The text in the property";

    // method declaration
    public function displayValue() {
        echo $this->value;
    }

    static function displayText() {
        echo "The text from the static function";
    }
}


$instance = new Example();
$instance->displayValue();

$instance->displayText();

// Example::displayValue();         // Direct call to a non static function not allowed

Example::displayText();
  • 1
Reply Report

Warm tip !!!

This article is reproduced from Stack Exchange / Stack Overflow, please click

Trending Tags

Related Questions