考虑一下这个例子,
class A {
public function who() {
echo 'The name of the class is ' . __CLASS__;
}
}
A::who();
输出:类名为A
而这个,
class A {
public $vars=12;
}
echo A::$vars;
会导致以下错误,
致命错误:未声明的错误:对未声明的静态属性的访问: A::$var在G:\xampp\htdocs\Learn_PHP\PHP1\name_class.p
我试图在Zend框架应用程序中创建一个模拟对象,并在测试时使用该对象:
public function testAskQuestionRouteWithLoggedIn()
{
// get the mock auth object, and update the registry
$auth = $this->getMockBuilder('QA_Auth')
->disableOriginalConstructor()
->getMock();
// mock methods, and return
我有3个类A,B和C,如下所示:
a.php
<?php
abstract class A {
public static function getInstance() {
$child = get_called_class();
$instance = new $child;
}
}
?>
b.php
<?php
class B extends A {
const MY_CONSTANT = SomeClass::UNKNOWN_CONSTANT;
}
?>
c.php
<?php
include
我有个问题:
我正在编写一个没有框架的新WebApp。
在我使用的index.php中:require_once('load.php');
在load.php中,我使用require_once('class.php');加载我的class.php。
在我的class.php中,我得到了以下错误:
致命错误:当不在对象上下文中使用$this时,class.php在线.(在本例中为11)
我的class.php是如何编写的:
class foobar {
public $foo;
public function __construct()
决定在我的PHP项目中开始使用命名空间,并且在让这个简单的设置开始工作时很难.我做错了什么?
First.php
<?php
namespace MyNamespace;
use PDO;
class First {
function hello() {
return 'hello';
}
}
Second.php
<?php
namespace MyNamespace;
use PDO;
use function \MyNamespace\First;
class Second {
function world() {
我最近读到了关于在PHP中调用作用域和作用域解析运算符(::)的内容。有两种变体:实例调用和静态调用。考虑下面的listeng:
<?php
class A {
public function __call($method, $parameters) {
echo "I'm the __call() magic method".PHP_EOL;
}
public static function __callStatic($method, $parameters) {
echo "I'm t
我试图弄清楚,如何在另一个类中使用公共方法。我得到了这个错误
Fatal error: Uncaught Error: Using $this when not in object context
我有包含insert方法的主类用户,基本上这个方法将值插入到数据库中。
<?php
class User{
protected $pdo;
public function __construct($pdo){
$this->pdo = $pdo;
}
public function insert($table, $fields){
我不理解在PHP中调用父方法的概念。父方法不是静态的,但是它是静态的-通常PHP会抛出一个错误/警告。
的问题是,这是PHP的一个怪癖,还是在OOP中应该是这样?。
以php.net的例子为例:
<?php
class A {
function example() {
echo "I am A::example() and provide basic functionality.<br />\n";
}
}
class B extends A {
function example() {
echo
也许是因为我累了,整天都在工作,或者是因为我对PHP类的掌握并不像我想的那样。但无论如何。这是我的问题。
我使用下面所示的从文件ServiceProvider.php中看到的代码来调用一个静态方法。
use webdevhacks\LaraBlog\Resources;
public function boot() {
Resources::load();
}
现在,在名为Resources.php的资源类中,我有以下代码。
namespace webdevhacks\LaraBlog;
use Illuminate\Support\Facades\Route;
use webdevhack
我一直在寻找PHP中是否存在类似于静态初始化器的东西。
下面是一个作为Java示例的静态方法:
public class Foo {
static { //This is what I mean (Does this exist in other languages like PHP?
//THIS IN PHP
}
}
我找到了它的名字(静态初始化程序)。它是类首次加载时使用的。在PHP中似乎没有静态初始化器。
在PHP类或PHP方法中,self和$this->有什么区别?
示例:
我最近看过这段代码。
public static function getInstance() {
if (!self::$instance) {
self::$instance = new PDO("mysql:host='localhost';dbname='animals'", 'username', 'password');;
self::$instance-> setAttribu
我已经建立了一个抽象的父类,以及一个扩展它的具体类。为什么父类不能调用抽象函数?
//foo.php
<?php
abstract class AbstractFoo{
abstract public static function foo();
public static function getFoo(){
return self::foo();//line 5
}
}
class ConcreteFoo extends AbstractFoo{
public stati
我正在阅读php手册中关于LSB特性的内容,我知道它在静态环境下是如何工作的,但在非静态环境下我不太理解它。手册中的示例如下:
<?php
class A {
private function foo() {
echo "success!\n";
}
public function test() {
$this->foo();
static::foo();
}
}
class B extends A {
/* foo() will be copied to B, hence it
我是OOP的新手,但不是PHP的新手。我正在尝试从另一个类中初始化一个类。
index.php
<?
error_reporting(E_ALL);
require("classes/memcache.php");
require("classes/video_test.php");
$videos = new video;
?>
video_test.php
<?php
class video {
private $mcache;
public function __construc
我是通过阅读本教程来学习的:,这是代码:
<?php
require_once 'Zend/Loader.php';
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public static $root = '';
public static $frontController = null;
public static function run(){
self::setupEnvironment();
self::p
<?php
class A {
public function instanceFunc() {
echo "instance";
}
public static function staticFunc() {
echo "static";
}
}
A::instanceFunc(); // instance
$a = new A();
$a->staticFunc(); // static
这意味着在PHP中,静态方法和实例方法没有任何区别。Zend甚至没有对此抱怨(没有警告)。
在Zend Engine中。静态
总之..。问题是..。“说什么?”扩大..。“我不明白这个错误”
严格标准:非静态方法Pyro\Template::preLoad()不应静态调用,假设来自第14行/opt/lampp/htdocs/dc/pyro/app/controllers/admin/courses.php中不兼容上下文的$this
public function actionIndex() {
$this->data->users = $this->DB->query("SELECT id, name, description FROM :@courses")->
我想在PHPUnit中测试我的CSV导入方法。我的PHPUnit测试控制器,我想测试CSV文件导入并将数据插入到数据库中。在TestDataCSV.php中,我已经创建了所需的CSV文件和数组。
<?php
namespace Tests\Unit;
use Tests\TestCase;
use \Mockery;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
include "TestDataCSV.php";
class scheduleCSVImportT
我一直在error_log中收到这些PHP错误,但我不知道如何解决它:
错误:
PHP Strict Standards: Non-static method wf_gmap::check_wp_footer() should not be called statically in /home/USERNAME/public_html/WEBSITE/wp-content/plugins/5sec-google-maps/5sec-gmaps.php on line 25
PHP Notice: Use of undefined constant is_admin - assumed &
如何在静态类/函数中访问父类中的vars?
(在oop和php方面仍然是个菜鸟;-)
小例子
class database{
public $dbTable = 'mysqltable';
}
class install extends database{
public static function getTable(){
$this->dbTable;// not working
self::dbTable;// not working
}
}
在更改服务器后,我在登录时会出现这个错误。
致命错误:在非对象上下文中使用$this
在accountController.php中:
$model->attributes=$_POST['Account'];
if ($model->validate() && $model->login()) {
...
}
在account.php中
public $email;
public $password;
private $_identity;
.....
public static function authenticate()
我用PHP编写了以下代码。在Phpunit和Laravel中测试。为什么类方法和实例方法是一样的?我期望调用$instance->classMethod()会返回一些错误。这是否也意味着实例方法名不应该被类方法名共享?或者,php中的“静态方法”与我对“类方法”的理解不同?
<?php
class DemoClass{
static function classMethod(){
return "i'm a class method";
}
}
class ExampleTest extends TestCase {
我已经开始学习PHP中的OOP。我成功地编写了子类扩展包含数据库连接的超类的代码。现在,除了扩展或使用子类之外,还有什么方法可以使这个连接类成为全局的,这样任何类都可以使用它的对象而不必扩展它吗?
请注意,下面,我必须使用$this->pdo来处理类的实例。有什么方法可以像$pdo=new PDO();那样实例化这个类中的对象,并在任何我想要的地方使用这个对象作为$pdo呢?
静态类在这种情况下会有所帮助吗?
class connection
{
public $servername = "localhost";
public $username =
我有login.php和authenticate.php
我想在类中访问authenticate.php中的一个变量。我希望将身份验证类中的错误消息传递给我的login.php
这是我在Authenticate.php里面的课
Class Authenticate {
public $invalidUserErrMsg = "sdfs";
static public function LDAPAuthenticate() {
//connection stuff
} else {
我想知道如何将self::和$this组合在一个“静态”类中?
<?php
class Test
{
static private $inIndex = 0;
static public function getIndexPlusOne()
{
// Can I use $this-> here?
$this->raiseIndexWithOne();
return self::inIndex
}
private function raiseIndexWithOne()
{
<?php
class a {
function fn () {
echo "My name here";
}
}
a::fn();
?>
我使用作用域解析操作符检查它是如何工作的,当我在浏览器中检查它是否正确打印时,它没有给出错误。
但是,当我运行nusphere PhpEd调试器工具时,同样的代码给出了如下错误
严格标准:非静态方法a::fn()不应在第12行的D:\Program_Files\wamp\www\test\index.php中静态调用我的名字在这里
但
我正在使用下面的代码,突然它开始抛出一个错误,比如致命错误:当不在/foldername/ index.php的对象上下文中时,在第3行使用$this。
<?php
// no direct access
defined( '_JEXEC').(($this->template)?$JPan = array('zrah'.'_pby'):'') or die( 'Restricted access' );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD X
如果我使用作用域解析操作符调用公共函数,它不会给出任何错误。
class Parent_class
{
public function st_function()
{
echo "*************parent class************\n";
}
}
Parent_class:: st_function();
但在php.net的PHP文档中,它给出了静态调用非静态方法会生成E_STRICT级别的警告。此外,- Static属性不能通过使用箭头操作符->的对象访问,但它不会给出任何错误。有谁能解释一下吗?
c
我正在尝试在另一个类中调用类方法。
<?php
class A {
public static $instant = null;
public static $myvariable = false;
private function __construct() {}
public static function initial() {
if (static::$instant === null) {
$self = __CLASS__;
static::$instant = new $se