在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
我有个问题:
我正在编写一个没有框架的新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
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
<?php
class T {
public function x(){
return true;
}
}
var_dump(T::x());
class X {
public function x(){
return true;
}
}
var_dump(X::x());
这一守则的结果是:
bool(true)
PHP Fatal error: Non-static method X::x() cannot be called sta
直到昨天,我还认为这两种访问类的方法是相同的。谷歌没有发现任何东西(要么是那个,要么是我的关键字不好)。通过定义类的新实例来访问类与直接调用类方法有什么不同。
我几乎不明白我刚才问的是什么,因为我不知道我在问什么,但请允许我举几个例子来帮助解决这个问题。
自从我在PHP中使用类以来,我一直在定义类的一个实例,然后从该变量访问方法。下面是一个示例:
<?php
class Myclass
{
public function my_method() {
return "This is my method";
}
}
$myclass = new My
也许是因为我累了,整天都在工作,或者是因为我对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
class baseModel
{
public static function show($className=__CLASS__)
{
print_r($className);
}
public function test()
{
static::show();
}
}
class AModel extends baseModel
{
public static function show($className=__CLASS__)
{
print_r(
我已经建立了一个抽象的父类,以及一个扩展它的具体类。为什么父类不能调用抽象函数?
//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
考虑一下这个例子,
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
我有下面这段代码,它不能工作:
<?php
class test{
public static $var = 'foo';
public static function printvar(){
echo "Var value is {self::$var}";
}
}
test::printvar();
?>
但是,这是可行的:
<?php
class test{
public static $var = 'foo';
public static function prin
所以,我想弄清楚:
...?php
$object = new A();
class A
{
static public $foo = 'bar';
function displayFoo()
{
echo $this->$foo;
}
}
A::displayFoo();
A->displayFoo();
?>
关于这一点,你能找到多少错误?你能用人类的语言告诉我它们是什么吗?我真的不能从codepad使用的验证器中解释什么是正常的,什么是不正常的……
我已经开始学习PHP中的OOP。我成功地编写了子类扩展包含数据库连接的超类的代码。现在,除了扩展或使用子类之外,还有什么方法可以使这个连接类成为全局的,这样任何类都可以使用它的对象而不必扩展它吗?
请注意,下面,我必须使用$this->pdo来处理类的实例。有什么方法可以像$pdo=new PDO();那样实例化这个类中的对象,并在任何我想要的地方使用这个对象作为$pdo呢?
静态类在这种情况下会有所帮助吗?
class connection
{
public $servername = "localhost";
public $username =
我正在努力让我的网站有一个公开的版本。我可以连接到该页面。路由工作正常。
这个应用程序正在使用一个API,这会给出错误:
ErrorException in Transformer.php line 16:
Runtime Notice: Static function App\Transformers\Transformer::transform() should not be abstract
转换器get是这样调用的:FeedTransformer::transformCollection( $userFeed ),它是这样构建的:
FeedTransformer.php
<?ph
=== Base.php ===
<?php
class Base
{
public static function e()
{
static $number = 0;
$number++;
var_dump($number);
}
}
=== A.php ===
<?php
class A extends Base {}
=== B.php ===
<?php
class B extends Base {}
=== test.php ===
function __autoload($classname)
我是通过阅读本教程来学习的:,这是代码:
<?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 Functions {
public static function extendSql($dbhost, $dbuser, $dbpass, $dbname) {
// making the mysql connection dynamically editable
$mysql_connect = mysql_connect($dbhost, $dbuser, $dbpass)or die("Could not connect: " . mysql_error());
$mysql_
总之..。问题是..。“说什么?”扩大..。“我不明白这个错误”
严格标准:非静态方法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")->
我有一个我正在研究的系统:
abstract class Model {
static $table = "";
abstract static function init();
public static function getById() {
$table = self::$table;
}
}
class Model_user extends Model {
static function init() {
self::$table = "users";
}
}
cla
<?php
class c1
{
public static function f1()
{
return "hello";
}
public static $a=10;
public function f2()
{
echo $this->f1(); //prints "hello"
echo $this->a;//ERROR:Undefined property: c1::$a in C:\wamp\www\class_in_php\example5.php on line 14
}
我知道这两个之间的区别,我已经检查过手册了。
我还是会有些困惑。我可以在类的方法中使用__FUNCTION__,它表示这个方法的名称。当我回显它的时候,它只输出名字。这里已经很清楚了。
但是为什么我可以在非calss方法中使用__METHOD__。这也只是表示正常函数的名称。正常函数是在某个容器中吗?当在正常函数中回显__METHOD__时,容器是什么吗?
代码:
<?php
class dog {
private $name = 'dog';
public static function name() {
echo __METHOD__
我是第一次在一个web应用程序上工作,并编写基于纯OOP的PHP。我有一个关于静态方法和标准函数的问题:
下面是一个示例场景:
class Session
{
public function start_new_session()
{
session_start();
//other code here like token generator
}
}
对
class Session
{
static function start_new_session()
{
session_start();
从PHP7.4升级到PHP8.1后,我有以下PHP错误
$result = CarsDAO::selectCarsByColor($idCar, self::CARS_PER_PAGE, 0);
Non static method 'selectCarsByColor' should not be called statically
有什么好办法重写这个吗?
我有两个模型产品和照片。这些模型如下
照片模型
public function Product(){
return $this->belongsTo('App\Product');
}
产品模型
public function Photo(){
return $this->hasMany('App\Photo');
}
我要把所有的产品照片都拿出来。为此,我试过这个
$Photo = Products::Photo()->where(['catagory' =&g
在我的项目中,我在php中定义了一个Datasource类。
我想用类调用函数,所以我在Datasource类中定义了静态getRedis函数。
以下是Datasource.php代码:
<?php
namespace common;
class Datasource {
public $config_name;
public $server_region;
public function __construct() {}
public static function getRedis($config_name = NULL, $server_region
说我有以下几点:
<?php
abstract class MyParent
{
public static $table_name;
public static get_all(){
return query("SELECT * FROM {$this->table_name}");
}
public static get_all2(){
return query("SELECT * FROM ".self::table_name);
}
}
class Child ex
我认为我们通常使用静态方法,因为我们不需要实例化对象。我们可以使用className::staticFunction来调用静态方法,bub今天发现:
test1.php
<?php
class Foo {
static public function helloWorld() {
print "Hello world " ;
}
}
Foo::helloWorld();
test2.php
<?php
class Foo {
public function helloWorld() {
print "