Configuration php var public

self, static, var, public

Не понимаю ничего в этих приставках. Зачем делать static-переменные? Чем отличается var от public?
Стоп. static-переменные нужны для того, чтобы во время создания объекта произошла инициализация типа

Скрипты перестали различать $_POST[‘var’], $_SESSION[‘var’] и просто $var
После переезда на новый хостинг с php 5.2 на php 5.3 обнаружил глюк. Почему то скрипты перестали.

Global $var или $GLOBALS[‘var’]
Здравствуйте! Такие вот два примера: function assoc($sql, $array = ) < global $pdo; .

В чем разница между $var и $$var?
Обясните плиз новичку разницу между $var и $$var Thanx!

Под static-переменную память выделяется единожды при запуске программы и освобождается в конце(при завершении программы), т.е. объявляя такую переменную мы можем сохранить ее значение при множественных вызовах функции, в которой она объявлена.

public-данные доступны за пределами класса, а не только для методов класса. Подробнее в гугле

Тоесть когда создаётся объект, только тогда создаётся static-переменная, да? Но ведь мы можем получить к ней доступ через self значит она есть. А в чём разница между var и public. Можно обойтись ведь без static, Как мне кажется.

static-члены класса доступны даже если объект этого класса не создан:

class A { public static $static_item = 'hello'; public static function hello() { echo 'hello_function'; } } echo A::$static_item; // выведет hello, хотя объекты класса A не создавались. A::hello(); // выведет hello_function

Vovan-VE, просматриваю.

Добавлено через 1 минуту
ostgals, это нужно для того, чтобы не создавая объект, ты имел доступ к этой переменной? А если и public, и static, то оба варианта (. ->) будут доступны?

Добавлено через 3 минуты
Кто-нибудь может привести простой пример, где статические данные реально нужны?

ЦитатаСообщение от Hagrael Посмотреть сообщение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
class A { protected static $InstanceCounter = 0; public function __construct() { self::$InstanceCounter++; echo '+A' . PHP_EOL; } public function __destruct() { echo '-A' . PHP_EOL; self::$InstanceCounter--; } } echo A::$InstanceCounter . PHP_EOL; // 0 $a = new A(); echo A::$InstanceCounter . PHP_EOL; // 1 $b = new A(); echo A::$InstanceCounter . PHP_EOL; // 2 unset($a); echo A::$InstanceCounter . PHP_EOL; // 1 unset($b); echo A::$InstanceCounter . PHP_EOL; // 0

Vovan-VE, ясно. Это для того, чтобы именно работать с классами, а с объектами надо работать public’ами, так?

Да, как-то так. У экземпляров класса есть свойства и методы. А статические свойства и методы присущи самому классу, а не его экземплярам.

Vovan-VE, ясно. Спасибо.

Добавлено через 11 минут
Но смотри: вот допустим счётчик объектов. Вот к примеру код:

class Class1 { function __construct() { self::count=self::count+1; $this->count=self::count; echo $this->count; } }

И эта функция, как я полагаю, будет писать кол-во объектов (объект будет писать свой номер). Всё правильно?

Hagrael, Теоритически правильно. Фактически есть три ошибки. 1: Статический и обычный count надо обозвать по-разному. 2: Не декларированы ни тот, ни другой. 3: Статические свойства надо писать ClassName::$StaticVar .

Я не знаю как там в PHP статистические переменные ведут себя в классе, но в C++ статистические переменные в классе — это переменные, которые всегда имеют одно значение не зависимо от объекста. Т.е. давайте (на C++) напишем программу, которая считает сколько объектов создано:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include class count { public: static int i; count() { i++; } // Я немножко забыл как делать конструкторы, но вроде так. }; int main() { count a,b,c,d; cout  "Объявлено "  count::i  " объектов.\n"; count e,f; cout  "Объявлено "  count::i  " объектов.\n"; return 0; }
class CL { static $count; // Тогда я полагаю её и так можно будет вызвать через :: public $objcount; // Это переменная объекта function __construct { self::count=self::count+1; $this->objcount=self::count; echo $this->objcount; } }
class CL { static $count; // Тогда я полагаю её и так можно будет вызвать через :: public $objcount; // Это переменная объекта function __construct { static $count=static $count+1; public $objcount=static $count; echo $this->objcount; } }

Блин, а. Пожалуйста, приведите нетрудный пример. ещё раз. Да, да, вот такой вот я непонятливый. Заранее благодарен.

Vovan-VE, я буду продолжать читать материал на php.su, но всё равно прошу помочь (но если не поможешь, то разумеется, я пойму, я б и сам навряд ли стал себе столько долго вдалбливать =) )

Добавлено через 10 часов 21 минуту
Ну как бы кажется я понял, public — для объектных переменных, static — для переменных класса.

Hagrael, public, protected и private — это видимость. static — это модификатор статичности.

class A { public $a; protected $b; private $c; static $d1; // то же, что public static public static $d2; protected static $e; private static $f; }

ЦитатаСообщение от Vovan-VE Посмотреть сообщение

Hagrael — это тоже приставка?
Кое-что уже проясняется. Значит, public, private, protected (кст., а var тоже ведь к этому относится, да?) — это одна группа (отвечающая за область видимости), а static — это как бы опция, которую можно ещё дополнительно включить. Щас ещё раз просмотрю коды и попробую понять, для чего нужен static. Кст., то есть если у меня private $a, то вызвать её через $obj->a я не могу, так?
Но ты говорил, что

ЦитатаСообщение от Vovan-VE Посмотреть сообщение

Этого я не понял. Их так надо объявлять или возюкаться с ними так надо?

Добавлено через 32 минуты
Хм. не очень понял вот тот твой код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
class A { protected static $InstanceCounter = 0; public function __construct() { self::$InstanceCounter++; echo '+A' . PHP_EOL; } public function __destruct() { echo '-A' . PHP_EOL; self::$InstanceCounter--; } } echo A::$InstanceCounter . PHP_EOL; // 0 $a = new A(); echo A::$InstanceCounter . PHP_EOL; // 1 $b = new A(); echo A::$InstanceCounter . PHP_EOL; // 2 unset($a); echo A::$InstanceCounter . PHP_EOL; // 1 unset($b); echo A::$InstanceCounter . PHP_EOL; // 0

Значит, static — это переменная, относящаяся к классу, так? Она появляется, только когда создаётся объект или нет? Для чего вообще её писать, если можно написать protected. Стоп. Если я напишу просто protected, то переменная будет относится к данному объекту (и вызвана только из него и из его потомков, и ко всем остальным объектам данного класса это не будет иметь никакого отношения), а если напишу protected static, то это свойство класса можно будет вызывать только из самого класса и из его наследников, так? А var — это чтобы данная переменная была видима только в данном блоке программы (<>) и как я понял в его подблоках. Я всё правильно понял? Достук к переменным класса такой: ClassName::$variable, а достук к переменным объекта такой: $ObjectName->Variable. Кажется я разобрался.

Добавлено через 56 секунд
Кст., и код твой теперь я понял! СПАСИБО, Vovan-VE.

Источник

Laravel /public Folder: How to Configure Domains for in Apache/Nginx

Povilas Korop
Founder of QuickAdminPanel

For new Laravel users, it’s often difficult to setup server and domain properly, especially with /public folder. This article will explain and try to help.

Why /public is needed at all?

By default, web-server is loading index.php file, right? So why Laravel framework couldn’t just have that index file in main folder? Why /public?

The answer is security. Folder name explains it all – it’s the only folder that would be publicly accessible from the browser. So anything you put in /public, like /public/css, /public/js or /public/images/products – those will be accessible just by typing URL in the browser.

At the same time, it’s protecting all the other folders which are one level above.
So /app, /config, /resources folders will not be available to load from the browser, no matter what URL someone puts in.

In other words, all your application logic is hidden from browser, and you allow only /public folder to be accessible.

How to configure /public folder?

Another mistake from new Laravel developers I see, is that they load URL like this: http://localhost/project1/public – so public is a part of the URL. It is possible and may even work locally, but can you imagine someone typing that as part of real URL?

Can you imagine writing facebook.com/public instead of facebook.com in the browser?

So, our goal is that your domain would automatically load /public folder somehow. And that depends on web-server you are using.

Most likely you are using Apache or Nginx.
Even if you are using some web-server bundle like XAMPP/MAMP or virtual server like Laravel Homestead, underneath they still have one or another – Apache or Nginx.

So you need to configure domains (or they are sometimes called sites) in those web-servers.

It will also help you to work with multiple projects. So you wouldn’t just have multiple folders and load like localhost/project1 and localhost/project2, but will have project1.test and project2.test as proper domains working locally.

Whenever you’re loading domain like project1.test, it needs to be configured in Apache or Nginx configuration files.

Locations and names of those files will vary depending on your operating system.

For Apache, file name may be in sites-enabled folder, for example /etc/apache2/sites-enabled/000-default.conf or, for MAMP, it would be /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf where you need this:

 ServerAdmin povilas@laraveldaily.com DocumentRoot "/Applications/MAMP/htdocs/project1/public" ServerName project1.test 

See that /public part at the end of DocumentRoot? That’s exactly how to point your domain to that public folder.

Notice: after editing that configuration file, don’t forget to restart Apache server.

For Nginx server, configuration file will be somewhere like /etc/nginx/sites-enabled/project1.test, with this code:

In this case, you need to look at root variable and put /public at the end of it. Also, restart the server.

Don’t forget .env file

Another thing I see often is that people leave .env file with default values after installation, except for changing DB credentials.

What you need to set up is APP_URL variable.

In your case, it should be your domain name with full prefix http:// or https://.

I’ve written an article about it with a bit more details – Why it’s important to change APP_URL in Laravel .env file

Other articles may be useful:

Finally, if it sounds too complicated, there are tools to help setting up servers quicker, I’m a big fan of Laravel Forge – here’s a video of how we use it for our projects.

So, that’s it.
I hope now you understand why that /public is needed and how to configure it.

Источник

Читайте также:  Get header with curl php
Оцените статью