Deprecated Non-static method should not be called statically (Php 5’ten 7’ye)

Php sürüm 5 te sınıf içerisinde kullandığınız statik fonksiyonları php sürrüm 7 ve 8 de çalıştırmak istediğiniz de böyle bir hata ile karşılaşabilirsiniz.

PHP
1 lines
class Sınıfım{ function fonksiyonum(){ } }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PHP 5 için çalışan şekli aşağıdaki gibidir.

PHP
1 lines
Sınıfım::fonksiyonum();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PHP7+ için bu şekilde düzeltebilirsiniz.

PHP
1 lines
(new Sınıfım)->fonksiyonum();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Böylelikle hatanızdan kurtulup çalışan bir statik fonksiyonunuz olacaktır.

Warning: get_class() called without object from outside a class in Hatası Çözüm

Hata Örneği

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return null;
}
}
class test extends sinif{}
echo get_class(test::OrnekAl());
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

get_class ile bir sınıf ismi döndürmek istedik. Fakat dönen test::OrnekAl() sonucu bir fonksiyon içindeki null‘dü. Düzeltmek için aşağıdaki yöntemler kullanılabilir.

1.Ana ismi almak için fonksiyon sonucunu static sınıfa çevirmek

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return new static;
}
}
class test extends sinif{}
echo get_class(test::OrnekAl());
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

2.Ana ismi almak için fonksiyon ismini kaldırmak

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return null;
}
}
class test extends sinif{}
echo get_class(new test);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

3.Alt ismi almak için sınıfı döndürmek

Markdown
9 lines
<?php
class sinif{
public static function OrnekAl(){
return new sinif;
}
}
class test extends sinif{}
echo get_class(test::OrnekAl());
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

4.Alt ismi almak için direk sınıfı çağırmak

PHP
9 lines
<?php
class sinif{
public static function OrnekAl(){
return null;
}
}
class test extends sinif{}
echo get_class(new sinif);
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

cSQLi – Mysqli Veritabanı Sınıfı

PHP
58 lines
<?php
header('Content-Type: text/html; charset=utf-8');
class cSQLi {
public $oci;
public $rs;
public function __construct($server, $user, $pass, $db) {
$this->oci = new mysqli($server, $user, $pass, $db);
if (mysqli_connect_errno()) {
printf("Bağlantı Hatası: %s\n", mysqli_connect_error());
exit();
}
if (!$this->oci->set_charset("utf8")) {
printf("Utf8 Karakter Seçim Hatası: %s\n", $this->oci->error);
exit();
}
}
public function affRows() {
return $this->oci->affected_rows;
}
public function closeOCI() {
$this->oci->close();
}
public function closeRS() {
$this->rs->close();
}
public function escape($string) {
return $this->oci->real_escape_string($string);
}
public function killThread($tid) {
$this->oci->kill($tid);
}
public function lastID() {
return $this->oci->insert_id;
}
public function numRows() {
return $this->rs->num_rows;
}
public function query($query) {
return $this->rs = $this->oci->query($query);
}
public function fetch($query) {
while ( $row = $query->fetch_assoc() ) {
$results[] = $row;
}
return $results;
}
}
$db = new cSQLi('localhost','root', '', 'php');
$query=$db->query('SELECT * FROM php WHERE id = 1');
print_r($db->fetch($query));
print_r($db->numRows());
print_r($db->affRows());
print_r($db->lastID());
print_r($db->escape("merhaba'lar"));
print_r($db->killThread(1));
print_r($db->closeRS());
print_r($db->oci);
print_r($db->closeOCI());
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Çıktısı

Markdown
9 lines
Array([0] => Array([id] => 1))
1
1
0
merhaba\'lar
0
0
mysqli Object ( [affected_rows] => 1 [client_info] => mysqlnd 5.0.10 - 20111026 - $Id: xxxxx $ [client_version] => 50010 [connect_errno] => 0 [connect_error] => [errno] => 0 [error] => [error_list] => Array ( ) [field_count] => 1 [host_info] => localhost via TCP/IP [info] => [insert_id] => 0 [server_info] => 5.6.15-log [server_version] => 50615 [stat] => Uptime: 200502 Threads: 1 Questions: 579 Slow queries: 0 Opens: 95 Flush tables: 1 Open tables: 64 Queries per second avg: 0.002 [sqlstate] => 00000 [protocol_version] => 10 [thread_id] => 95 [warning_count] => 0 )
mysqli_result Object ( [current_field] => 0 [field_count] => 6 [lengths] => [num_rows] => 1 [type] => 0 )
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Zamana ve Eklere Göre Rastgele Şifre Üretme Sınıfı

PHP
19 lines
<?php
class sifreUret{
var $gecici;
function sifreUret($uzunluk=6, $ek="kelime"){
$sifre=$ek.date("s:H:m:i:s");
$this->gecici=substr(md5($sifre), 2, $uzunluk);
}
function get_sifre(){
return $this->gecici;
}
}
$p=new sifreUret();
$p->sifreUret(8);
print $p->get_sifre();
echo "<br>";
$p->sifreUret(8, "benimkelimem");
print $p->get_sifre();
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Çıktısı

PHP
2 lines
7fe03153
c65ebee1
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

En iyi Xml veya HTML Belgesi Oluşturma Sınıfı

PHP
42 lines
<?php
Class Etiket{
var $etiketler;
function Etiket($ac,$icerik = null,$kapat = null){
$this->ac = $ac;
$this->icerik = $icerik;
$this->kapat = $kapat;
}
function ekle($ac, $icerik, $kapat){
$yeni_etiket = new Etiket( $ac, $icerik, $kapat );
if( $this->kapat == null )
{
die("invalid ML object");
}
$this->etiketler[] = $yeni_etiket;
return $yeni_etiket;
}
function derle( $derinlik = 0, $paragraf = "\t", $satirbasi = "\n" ){
$metin=null;
$centik = str_pad( "", $derinlik, $paragraf );
$metin .= $centik . $this->ac . $satirbasi;
if( $this->kapat == null )
return $metin;
if( $this->icerik != null)
$metin .= $centik . $paragraf . $this->icerik . $satirbasi;
if (is_array($this->etiketler)){
$anahtarlar = array_keys($this->etiketler);
foreach($anahtarlar as $anahtar){
$metin .= $this->etiketler[$anahtar]->derle( $derinlik + 1, $paragraf );
}
}
$metin .= $centik . $this->kapat . $satirbasi;
return $metin;
}
}
$ml=new Etiket("<html>","","</html>");
$ml->ekle("<h1>","Merhaba","</h1>");
$ml->ekle("<div>","Ulusan Yazılım","</div>");
echo $ml->derle();
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Çıktısı

HTML
8 lines
<html>
<h1>
Merhaba
</h1>
<div>
Ulusan Yazılım
</div>
</html>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 

Sınıfta Sabit Kullanma

En basit haliyle

PHP
6 lines
<?php
class ad{
const ADI="Mehmet";
}
echo ad::ADI;
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

şeklinde kullanabilirsiniz.

Bir başka örnek

PHP
12 lines
<?php
class ust {
public static function yas() {
echo " yaşındayım";
}
}
class yaz extends ust {
const sayi = 28;
}
echo yaz::sayi;
yaz::yas();
?>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX