>  기사  >  백엔드 개발  >  报个错Parse error: syntax error, unexpected 'static' (T_STATIC),

报个错Parse error: syntax error, unexpected 'static' (T_STATIC),

WBOY
WBOY원래의
2016-06-20 12:52:393018검색

<?phpclass ShopProduct{	  private $id = 0;    private $title;    private $producerMainName;    private $producerFirstName;    protected $price;    private $discount = 0;        function __construct($title,$firstName,$mainName,$price){        $this->title             = $title;        $this->producerMainName  = $mainName;        $this->producerFirstName = $firstName;        $this->price             = $price;    }         function setDiscount($num){        $this->discount = $num;    }        function getDiscount(){        return $this->discount;    }        function getTitle(){        return $this->title;         }        function getProducerFirstName(){        return $this->producerFirstName;	    }        function getProducerMainName(){        return $this->producerMainName;    }        function getId(){        return $this->id;    }        function setId($id){        $this->id = $id;    }        function static getInstance($id,PDO $pdo){        $stmt = $pdo->prepare("select * from products_4 where id =?");        $result = $stmt->execute(array($id));        $row = $stmt->fetch();        if(empty($row)){            return null;        }                if($row['type']=='book'){        	  $product = new BookProduct(        	      $row['title'],$row['firstname'],$row['mainname'],$row['price'],$row['numpages']        	  );        }        elseif($row['type']=='cd')        {            $product = new CdProduct(        	      $row['title'],$row['firstname'],$row['mainname'],$row['price'],$row['playlength']        	  );        }        else{        	  $product = new ShopProduct(        	      $row['title'],$row['firstname'],$row['mainname'],$row['price']        	  );        }                $product->setId($row['id']);        $product->getDiscount($row['discount']);        return $product;    }         function getPrice(){        return "({$this->price} - {$this->discount})";    }        function getProducer(){        return "{$this->producerFirstName}".        " {$this->producerMainName}";    }        function getSummaryLine(){        $base   = "{$this->title} ( {$this->producerMainName}";        $base  .= " {$this->producerFirstName} )";        return $base;    }}class CdProduct extends ShopProduct{    private $playLength = 0;        function __construct($title,$firstName,$mainName,$price,$playLength){        parent::__construct($title,$firstName,$mainName,$price);        $this->playLength = $playLength;    }        function getSummaryLine(){    	  $base   = parent::getSummaryLine();    	  $base  .= ": playing - time {$this->playLength}";    	  return $base;    }}class BookProduct extends ShopProduct{    private $numPages = 0 ;        function __construct($title,$firstName,$mainName,$price,$numPages){        parent::__construct($title,$firstName,$mainName,$price);        $this->numPages = $numPages;    }        function getNumPages(){        return $this->numPages;    }        function getSummaryLine(){        $base   = parent::getSummaryLine();        $base  .= ": page count - {$this->numPages}";        return $base;     }        function getPrice(){        return $this->price;    }}$dsn = "mysql:host=localhost;dbname=test";try{    $pdo = new PDO($dsn,"root","root");    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);    $obj = ShopProduct::getInstance(1,$pdo);}catch(PDOException $e){    echo $e->getMessage();}print_r($obj);

Parse error: syntax error, unexpected 'static' (T_STATIC), expecting identifier (T_STRING) in D:\Apache24\htdocs\PHP_OBJECT\4\4.1.2.php on line 46
function static getInstance 静态变量为什么这样写报错呢? static function 这样就可以输出数据?


回复讨论(解决方案)

function static 写反了,应为
static function 

function static 写反了,应为
static function 


这个在php文档上有写吗?

可能有吧,这是常识!

static function getInstance($id,PDO $pdo){
static 是修饰 function 的,是说名为 getInstance 的 function 是静态的

而你写成 function static getInstance($id,PDO $pdo){ 的话
且不说 static 的位置不对
function 后面应该是函数名,难不成就是 static getInstance ?
函数名也不能拆成两段呀,这不合语法

可能有吧,这是常识!

static function getInstance($id,PDO $pdo){
static 是修饰 function 的,是说名为 getInstance 的 function 是静态的

而你写成 function static getInstance($id,PDO $pdo){ 的话
且不说 static 的位置不对
function 后面应该是函数名,难不成就是 static getInstance ?
函数名也不能拆成两段呀,这不合语法


class StaticExample{
    public static  $aNum = 0 ;
    private static function sayHello(){        // private static 和static private两样排序都可以??
        self::$aNum++;
        print 'hello ('.self::$aNum.')';
    }
    
    function getSayHello(){
        self::sayHello();
    }
}

StaticExample::$aNum;
$staticExample = new StaticExample();
$staticExample->getSayHello();
但是这样没有报错,php版本是5.4.32的

看错了,谢谢您。结账。

function static getInstance 改为  static function getInstance

static是修饰符,按语法规则需要写在被修饰的变量或方法前面。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.