php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.05.2006, 13:54  
Neuer Benutzer
 
Registriert seit: 15.05.2006
Beiträge: 5
WickedImp
Standard Problem mit Global Scope von Funktionen

Laut PHP Handbuch werden Funktionen, die innerhalb von Funktionen definiert werden automatisch mit Global Scope gesetzt. Beispiel:
Code:
function a() {
  function b() {
    echo( "b" );
  }
  b();
}
a();
Bekanntlich sind Variablen, die innerhalb einer Funktion definiert werden nur lokal verfügbar. Mit global setzt man deren Global Scope. Jetzt möchte ich allerdings, das eine Funktion oder Klasse, die innerhalb einer Funktion definiert wurde (z.B. durch ein include oder require), auch nur in dieser verfügbar ist. Also ohne Global Scope.

Habe mich schon dumm und dusselig gesucht (Google, PHP.NET, etc...). Vielleicht weiß von euch jemand etwas darüber.
WickedImp ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.05.2006, 16:23  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Bei deinem Beispiel wäre die Funktion b nicht global verfügbar. Aber sobald a aufgerufen wird ist auch b global verfügbar.

So wie ich dich verstanden ahb möchtest du das b nicht global verfügbar ist. PHP macht b aber automatisch global verfügbar wenn a aufgerufen wird.
Flor1an ist offline   Mit Zitat antworten
Alt 15.05.2006, 16:31  
Neuer Benutzer
 
Registriert seit: 15.05.2006
Beiträge: 5
WickedImp
Standard

genau darum geht es mir... möchte halt, das eine funktion nur lokal innerhalb einer anderen funktion definiert ist. so kann ich z.B. verschiedene includes einladen und ausführen (die wiederum funktionen mit den selben namen definieren), indem ich in einer schleife, die funktion a aufrufe:

Code:
function a( $file ) {
  include( $file );
  func_in_file();
}
for( $c=0; $c<count($myarray); $c++ ) {
  a( $myarray[$c] );
}
würde mir ansonsten nen 'cannot redeclare' error bringen
WickedImp ist offline   Mit Zitat antworten
Alt 15.05.2006, 16:35  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ich wüsste jetzt nicht wie man dies ändern könnte. Ist doch eigentlich auch nicht notwendig, wofür möchtest du denn mehrere Dateien mit der selben Funktion laden?

Ich denke es gibt ne bessere Möglichkeit!
Flor1an ist offline   Mit Zitat antworten
Alt 15.05.2006, 16:43  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Erklär doch mal warum du das machen willst (genau) - sollte eigentlich für einen Profi auch selbstverständlich sein sich klar auszudrücken.
Zergling-new ist offline   Mit Zitat antworten
Alt 15.05.2006, 16:43  
Neuer Benutzer
 
Registriert seit: 15.05.2006
Beiträge: 5
WickedImp
Standard

Die ganze sache ist was komplizierter. Ist nen CMS das ich programmiert habe. Ist auch schon ne ganze Weile im Einsatz. Jetzt baue ich gerade nen internen Link Validator in Kombination mit einer Suche. Dieser läd die Seiten und baut den dynamischen Inhalt zusammen. Einige Includes haben jetzt allerdings die selben Funktions- und Klassennamen. Es ist dabei allerdings nicht zufriedenstellend, die Funktionen und Klassen umzubenennen, da das Problem immer wieder auftauchen kann in einem großen Projekt wo mehrere Leute dran arbeiten.

hatte halt gehofft, das man wie bei Variablen das global irgendwas in der Art für Funktionen und Klassen auch benutzen könnte in der Art 'function local funcname() {...}'
WickedImp ist offline   Mit Zitat antworten
Alt 15.05.2006, 16:47  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Naja normal solltest du eine Dokumentation für Projekte schreiben in dennen alle Funktionsnamen definiert sind sodass es eben KEINE Probleme damit gibt dass sich zwei Funktionen überschneiden. Da muss ich wirklich sagen für nen Profi ist das schlecht programmiert.
Flor1an ist offline   Mit Zitat antworten
Alt 15.05.2006, 16:49  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Das kannst du vergessen, eine Funktion kann nur 1x definiert werden und wenn das passiert ist sie global verfügbar.
Zergling-new ist offline   Mit Zitat antworten
Alt 15.05.2006, 17:00  
Neuer Benutzer
 
Registriert seit: 15.05.2006
Beiträge: 5
WickedImp
Standard

Zergling: gut zu wissen. dann muss ich einen weg drum herum finden.

RaZoR: auf das Basissystem und die Module trifft das auch zu. Allerdings für kleinere Includes (Sitemap, User-History, etc...) lohnt es sich nicht ein Modul zu schreiben. Also gibt es die Möglichkeit Code direkt oder per Include auszuführen. Und da kann das passieren, das bei 4 Sprachen mit jeweils 2500+ Seiten vorkommt, das durch diese Include (siehe Sitemap) Namen doch mal doppelt vorkommen. Ist im Normalfall auch kein Problem, da pro Aufruf nur eine Seite ausgeführt wird
WickedImp ist offline   Mit Zitat antworten
Alt 15.05.2006, 17:03  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Naja ich hätte halt dann so gearbeitet das jede Funktion den Seitennamen o.Ä. als Prefix hat. Weil jetzt hast du eben dieses unangenehme Problem. Auf die schnelle fällt mir kein Workaround ein.
Flor1an ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Timestamp problem phrain PHP Tipps 2008 2 04.04.2008 09:41
Funktionen aus externer Datei includen - Problem Darson PHP Tipps 2008 7 18.01.2008 16:27
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
krankes Problem, schwer zu beschreiben ZeHa PHP Tipps 2006 6 21.04.2006 13:35
Mehrere Variabelen mit global in Funktion einlesen DerTschmi PHP Tipps 2006 8 22.03.2006 21:27
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Globale Variabeln in Funktionen finerip PHP Tipps 2007 3 28.11.2005 16:00
[Erledigt] Problem mit Backslash Patrick Schwarz PHP Tipps 2005-2 5 26.07.2005 09:54
Problem mit Funktionen PHP Tipps 2004-2 6 04.12.2004 14:11
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
[Erledigt] Hilfe - Problem mit Warenkorb PHP Tipps 2004 1 26.11.2004 11:32
[Erledigt] problem mit ftp funktionen und chmod PHP-Fortgeschrittene 7 19.08.2004 16:59
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
c global scope, php scope, php scope funktion, php function scope, javascript global scope, php include scope, funktion in globalen scope setzen javascript, php global function scope, php scope bei externen fuktionen, php globals geht nur lokal, scope funktion php, global scope javascript, php scope global nur innerhalb einer klasse, php scopes funktionen, php global scope function, php funktionscod in global scope ausführen, global scope php, global scope c, global in function include, php scope funktionen globals

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.